2010-07-09 92 views
3

我有一個類(由我的數據庫中的EF構建),它有一個標誌字段。該字段作爲名爲CategoryEnum的列中的int存儲在數據庫中。我有一個指定標誌的允許值的枚舉:在實體框架中使用標誌Where子句

[Flags] 
public enum RuleCategories 
{ 
    None = 0x0000, 
    ApplicantBased = 0x0001, 
    LocationBased = 0x0002, 
    PolicyBased = 0x0004, 
    PropertyBased = 0x0008 
} 

當我嘗試檢索使用LINQ的對象實體

var allRules = from r in context.Rules 
       where ((r.CategoryEnum & (int)categories) != 0) 
       select r; 

我得到這個錯誤:

無法創建類型'閉包類型'的常量值。在此上下文中僅支持基本類型(如Int32,String和Guid)。

,或者,如果我嘗試將實體值轉換成枚舉

var allRules = from r in context.Rules 
       where (((RuleCategories)r.CategoryEnum & categories) != 0) 
       select r; 

我得到一個不同的錯誤:

無法投類型「System.Int32」鍵入RuleCategories'。 LINQ to Entities僅支持投射實體數據模型基元類型。

如何根據標誌選擇實體?

謝謝

回答

5

我想猜測並說您使用的是舊的EF 3.5。這在VS2010的EF 4.0中沒有問題。但是,3.5版本存在問題,您將不得不使用解決方法。鑄categories變量int查詢之前,然後使用該查詢本身內的int變量:

int preCastCategories = (int)categories; 
var allRules = from r in context.Rules 
       where ((r.CategoryEnum & preCastCategories) != 0) 
       select r; 
相關問題