Linq查询返回布尔值

时间:2013-06-05 15:56:43

标签: c#-4.0 entity-framework-4 asp.net-4.5

我使用.AddObject()将数据插入到我的实体表中。该对象是实体表的类型。对象是eventStudent,它有字符串eventStudent.ID,bool eventStudent.StudentPresent,bool eventStudent.ParentPresent。

学生是包含学生ID的字符串列表。他们在活动中的存在是另一个名为与会者的对象,由String 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'隐式转换为'bool'

如何改进我的查询以便将eventStudent.StudentPresent设置为True或False?

1 个答案:

答案 0 :(得分:0)

编译器不知道从查询返回的类型,因为您没有将其明确地转换为类型。结果,它获得了一个通用的IEnumerable类型。 (可能有很多记录正确返回?因此IEnumerable。这些记录可以是任何类型,因此是泛型类型)。

因此,如果您的数据库中的数据不好并且您有多条记录,请转换:

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;
实际上,我会使用lambda查询,但这只是个人偏好。