Как я могу сделать универсальный IQueryable в Linq? - PullRequest
1 голос
/ 28 октября 2009

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

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

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

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

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

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

1 Ответ

2 голосов
/ 28 октября 2009

См. Мой код ниже:

using System;
using System.Data.Linq;
using System.Linq;</p>

<p>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;
        }</p>

<pre><code>    #region IRepository<TKeyType,TModel> 

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

    #endregion
}
</code>

}

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 , который именно то, что вам нужно Удачи!

...