エンティティへのLINQ: "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()を呼び出すと、後でContains()使用でき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は合法ですか? はい、理由を学ぶ