1

我正在使用EF 5.我的實體有一個名爲Status的屬性,它是MyEntityStatus類型的枚舉。在實體框架的where子句中使用枚舉值數組5

我需要做一個查詢,我返回所有具有任何狀態列表的實體。

我的基本代碼如下:

var statusArray = new MyEntityStatus[]{MyEntityStatus.Status1, MyEntityStatus.Status2}; 
var results = myDataContext.MyEntities..Where(e => statusArray.Contains(e.Status)).ToArray(); 

代碼編譯,但EF返回以下錯誤:

The type 'MyEntityStatus' does not match the EDM enumeration type 'MyEntityStatus' or its underlying type 'Byte'. 

如果我嘗試只使用一個字節數組,而不是明確的枚舉類型,我得到以下錯誤:

DbExpressionBinding requires an input expression with a collection ResultType. 

任何想法?

+0

你試過Contains()而不是Any()嗎? – OzrenTkalcecKrznaric

+0

剛剛嘗試過。將澄清更新問題。 – RMD

+0

嘗試在包含之前將其轉換爲int:e => statusArray.Cast ().Contains ... – OzrenTkalcecKrznaric

回答

1

從Any()切換到Contains()讓我成爲了那裏的一部分,但最終的解決方案需要使用List而不是byte []。

這裏是工作的最終代碼:

var statusArray = (new MyEntityStatus[]{MyEntityStatus.Status1, MyEntityStatus.Status2}).Cast<byte>().ToList(); 
var results = myDataContext.MyEntities..Where(e => statusArray.Contains((byte)e.Status)).ToArray(); 

顯然,EF從字節[]不同對待一個列表。

請參閱:.NET Entity Framework - Using .Contains() to find a byte value in a Where expression