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

기본적으로, 내가하고있는 일은 함대 세트를 얻는 것입니다. 얼라이언스 회원 목록에는 나와 동맹 관계에있는 모든 사용자의 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() 사용할 수 있습니다.


인기 답변

이것은 이전 답변에서 데워진 ...

포함되지 않음.

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는 합법적입니까? 예, 이유를 알아보십시오.