Как я могу сделать общий IQueryable в Linq?

Я работаю над проектом ASP.NET MVC, и у меня такая конкретная ситуация: у меня есть 3 страницы: продукт, заказ, пользователь. И на каждой из этих страниц у меня есть ссылка, вызывающая один и тот же ActionResult, отличающийся только переданным аргументом в зависимости от страницы, на которой я нахожусь. Например:

public ActionResult(string typeOfPage)
{
   if (typeOfPage == "User")
   {
      //do something
   }
   else if (typeOfPage == "Product")
   {
      //do other things
   }
}

Теперь я хочу получить все данные из БД в зависимости от значения «typeOfPage». И, конечно же, в dbml все сущности имеют то же имя, что и значение typeOfPage (Пользователь, Продукт, Заказ).

Я пытаюсь избежать создания определенного IQueryable для каждой страницы в зависимости от значения typeOfPage.

Есть ли способ получить это строковое значение typeOfPage, получить объект с тем же именем и использовать IQueryable для получения всех данных из этого объекта??

Большое спасибо!!!


person André Miranda    schedule 28.10.2009    source источник


Ответы (1)


Смотрите мой код ниже:

using System;
using System.Data.Linq;
using System.Linq;

пространство имен MvcApplication1.Models { репозиторий открытого класса: IRepository, где TModel: класс, новый () { public DataContext dc; публичная строка pk {получить; задавать; } общедоступный репозиторий (DataContext dc) { this.dc = dc; }

    #region IRepository<TKeyType,TModel> 

    public IQueryable<TModel> getAllEntries()
    {
        return dc.GetTable<TModel>();
    }

    #endregion
}

}

using System;
using System.Data.Linq;
using System.Linq;


namespace MvcApplication1.Models
{
    public class Repository : IRepository
        where TModel : class, new()
    {
        public DataContext dc;
        public string pk { get; set; }
        public Repository(DataContext dc)
        {
            this.dc = dc;
        }

        #region IRepository 

        public IQueryable getAllEntries()
        {
            return dc.GetTable();
        }

        #endregion
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class NorthwindController : Controller
    {
        //
        // GET: /Northwind/
        NorthwindDataContext dc;
        Repository prdRepostory;
        Repository cstrRepostory;
        public NorthwindController()
        {
            this.dc = new NorthwindDataContext();
            prdRepostory = new Repository(dc);
            cstrRepostory = new Repository(dc);
        }

        public ActionResult Index(string typeOfString)
        {
            if (typeOfString == "Products")
            {
                return RedirectToAction("getProducts");
            }
            else if (typeOfString == "Customers")
            {
                return RedirectToAction("getCustomers");
            }
            else return View();
        }

        public ActionResult getProducts()
        {
            return View(prdRepostory.getAllEntries());
        }
        public ActionResult getCustomers()
        {
            return View(cstrRepostory.getAllEntries());
        }
    }
}

Для получения дополнительной информации вы должны обратиться к проекту codeplex MVCCRUD, который является именно тем, что вам нужно. Удачи !

person Laurel.Wu    schedule 28.10.2009