如何在Linq中创建通用IQueryable?

时间:2009-10-28 12:41:59

标签: asp.net-mvc linq-to-sql generics c#-3.0 iqueryable

我在ASP.NET MVC项目中工作,我遇到了这种情况:我有3个页面 - 产品,订单,用户。在每个页面中,我都有一个链接调用相同的ActionResult,区别仅在于根据我所在的页面传递的参数。例如:

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

我现在要做的是根据“typeOfPage”值从DB获取所有数据。当然,在 dbml 中,所有实体都与typeOfPage值(用户,产品,订单)具有相同的名称。

我正在尝试避免为每个页面执行特定的IQueryable,具体取决于typeOfPage值。

有没有办法获取此typeOfPage字符串值,获取具有相同名称的实体并使用IQueryable从此实体获取所有数据?

非常感谢!!!

1 个答案:

答案 0 :(得分:2)

请参阅下面的代码:

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<TKeyType,TModel> 

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

    #endregion
}

}

{{1}}
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
    }
}

有关更多信息,请参阅codeplex项目MVCCRUD,这正是您想要的。祝你好运!