2013-06-05 3 views
0

.AddObject()를 사용하여 데이터를 내 엔터티 테이블에 삽입하고 있습니다. 객체는 엔티티 테이블의 유형입니다. 객체는 eventStudent이며 eventStudent.ID 문자열, bool eventStudent.StudentPresent, bool eventStudent.ParentPresent가 있습니다.부울을 반환하는 Linq 쿼리

학생들은 학생 ID가 포함 된 문자열 목록입니다. 이벤트에서의 참석은 참석자라는 다른 객체에 있으며, 이는 studentID 문자열, bool studentPresent 및 bool parentPresent로 구성됩니다. StudentPresent 및/또는 ParentPresent에 해당하는 학생 ID 만 참석자 목록에 있습니다. eventStudent 객체를로드 할 때 StudentPresent 및 ParentPresent를 설정해야합니다. 이것은 내가 생각 해낸 것입니다 :

foreach (StudentMinimum student in students) 
{ 
eventStudent.StudentPresent = (from a in attendees 
          where a.StudentID.Contains(student.StudentID) 
          && a.StudentPresent 
          select a.StudentPresent); 
} 

내가 암시 내 쿼리를 개선 할 수있는 방법 '부울'

을에 유형 'System.Collections.Generic.IEnumerable을'변환 할 수 없습니다 오류 를받을 eventStudent 그래서 .StudentPresent가 True 또는 False로 설정되어 있습니까?

+1

쿼리 끝 부분에 .FirstOrDefault()를 넣으십시오. – Rodders

+0

빙고! 고마워. – Jazzy

+0

멋지 네요, 나는 적절한 대답을 게시 할 것입니다. – Rodders

답변

0

컴파일러는 형식에 명시 적으로 캐스팅하지 않았으므로 쿼리에서 반환 할 형식을 알 수 없습니다. 결과적으로 일반 IEnumerable 형식을 가져옵니다. (따라서 많은 레코드가 반환 될 수 있습니다. 따라서 IEnumerable. 그리고 해당 레코드는 각각 어떤 유형이든 상관 없으므로 일반 형식).

그래서 만약 당신의 DB에있는 데이터는 나쁜했다 당신은 변환, 다시 여러 레코드를 가지고 : 부울에

StudentPresent 
true 
false 
false 

이 일어날 수 없습니다. 이 문제를 해결할 수있는 몇 가지 방법이 있습니다. 개인적으로, 나는 비슷한 것을 할 것입니다.

var studentPresent = (from a in attendees 
          where a.StudentID.Contains(student.StudentID) 
          && a.StudentPresent 
          select a.StudentPresent).FirstOrDefault(); 

eventStudent.StudentPresent = (bool)studentPresent; 

음, 사실 저는 대신 람다 쿼리를 사용합니다. 그러나 그것은 단지 개인적인 취향입니다.