1

我使用實體框架4.
如何執行泛型Where Lambda子句。
如何創建通用lambda表達式。我的許多實體執行相同的Lambda表達式謂詞

我有許多實體需要相同的地方查詢。

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()) 
      }); 

------ UPDATE --------
下面是我嘗試一切都停止工作。

我的基類

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。這是行不通的。

回答

2

看來你有三種不同的類型都具有LangID屬性。我想使它們從一個共同的基類派生,其中該屬性被定義:

public class BaseClass 
{ 
    public int LangID { get; set; } 
} 

,然後有一個方法:

public Func<BaseClass, bool> GetLmbLang() 
{ 
    return (p => p.LangID == 1); 
} 

也可以使用含有該屬性的接口。

如果你想讓它一般你可以,但你仍然需要一個通用的約束,以表明一個共同的基本類型,如果你想使用LangID屬性:

public class SomeRepository<T> where T: BaseClass 
{ 
    public Func<T, bool> GetLmbLang() 
    { 
     return (p => p.LangID == 1); 
    } 
    ... 
} 
+0

我使用實體框架4.如何能我從BaseClass派生的SupplierTypeText,ProductText,CategoryText使用您的Generic GetLmbLang()方法。 – 2010-10-25 00:39:11

+0

這些類SupplierTypeText,ProductText,CategoryText無法從BaseClass派生,因爲它們已經從EntityObject派生出來 – 2010-10-25 02:51:55

+0

然後讓它們實現一個接口。 – 2010-10-25 06:05:06