LINQ to Entity:在“select”部分中使用Contains會引發意外錯誤

c# entity-framework linq-to-entities

我有一個針對Entity Framework對象的LINQ查詢。以下是查詢摘要:

//a list of my allies
List<int> allianceMembers = new List<int>() { 1,5,10 };

//query for fleets in my area, including any allies (and mark them as such)
var fleets = from af in FleetSource
             select new Fleet 
             {
                 fleetID = af.fleetID,
                 fleetName = af.fleetName,
                 isAllied = (allianceMembers.Contains(af.userID) ? true : false)
             };

基本上,我正在做的是獲得一組艦隊。 allianceMembers列表包含與我結盟的所有用戶的INT。如果車隊的所有者是該列表的一部分,我想設置isAllied = true,否則設置為false。

當我這樣做時,我看到一個例外:“LINQ to Entities無法識別方法'Boolean Contains(Int32)'方法”

如果我在查詢的where部分使用了contains,我可以理解得到這個錯誤,但為什麼我會在select中得到它?到目前為止,我認為查詢已執行並返回結果。這個小小的代碼根本不會限制我的數據。

關於如何通過設置isAllied標誌來完成我需要的任何提示?

謝謝

一般承認的答案

var fleets = from af in FleetSource;

var x = from u in fleets.ToList()
                         select new Fleet
                         {
                            fleetID = u.fleetID,
                            fleetName = u.fleetName,
                            isAllied = (allianceMembers.Contains(u.userID) ? true : false)
                         }

ToList()上調用ToList()執行查詢,稍後您可以使用Contains()


熱門答案

這是從之前的答案中挖走的......

包含不受支持。

IN和JOIN不是同一個運算符(按IN過濾永遠不會更改查詢的基數)。

而不是這樣做使用join方法。沒有使用查詢運算符,有點難以理解,但是一旦得到它,你就得到了它。

var foo = 
model.entitySet.Join(  //Start the join
values, //Join to the list of strings
e => e.Name, // on entity.Name
value => value, //equal to the string
(ModelItem ent, String str) => ent);//select the entity

這裡是使用查詢運算符

var foo = from e in model.entitySet
join val in values on
e.Name equals val
select e;


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因