【发布时间】:2010-10-26 11:06:26
【问题描述】:
我使用实体框架 4。
如何执行通用 Where Lambda 子句。?
我有许多实体需要相同的 Where 查询。
public Func<SupplierTypeText, bool> GetLmbLang()
{
return (p => p.LangID == 1);
}
public Func<ProductText, bool> GetLmbLang()
{
return (p => p.LangID == 1);
}
public Func<CategoryText, bool> GetLmbLang()
{
return (p => p.LangID == 1);
}
我想要一个通用的方法,比如
//public interface IRepository<T> : IRepository<T> where T : class
public Func<T, bool> GenericGetLmbLang()
{
return (p => p.LangID == 1);
}
目前,我对语言 ID == 1 进行了硬编码,这将来自用户会话以使其动态化。
如果我可以在 Where 子句中直接调用 GetLmbLang(),那将非常有用。
var ViewModel = _db.Suppliers.Select(model => new
{
model,
SupType = _db.SupplierTypeTexts.Where(a => GenericGetLmbLang())
});
--------更新--------
这是我正在尝试的,但没有任何效果。
我的基类
public class BaseGenericModel
{
public int LangID { get; set; }
public Func<BaseGenericModel, bool> GetLmbLang()
{
return (p => p.LangID == 1);
}
}
我的界面是
public interface IBaseRepository<T> where T : BaseGenericModel
{
Func<T, bool> GetLmbLang();
}
public class BaseRepository<T> : IBaseRepository<T> where T : BaseGenericModel
{
public Func<T, bool> GetLmbLang()
{
return (p => p.LangID == 1);
}
}
我无法从我的 SupplierTypeText、ProductText、CategoryText 调用此存储库。那是行不通的。
【问题讨论】:
标签: asp.net-mvc-2 entity-framework-4 lambda repository-pattern