如何将唯一标识符与Linq进行比较

时间:2012-02-16 01:13:00

标签: linq entity-framework guid

我有一个视图和实体

          var q = from stud in context.CollegePlans                                       
                 where stud .Meta.Active == true &&
                stud .CreatedBy_Id == user.Id
                select stud ;

        var k = from nv in context.vw_Year_Plans 
                 where ( nv.StudentId == q.Where( p => p.Section.StudentId))
                select nv;

studenId在视图和实体中都是Guid ..当我做上述事情时,它说不能隐含地转换system.Guid? bool ..怎么克服这个?

1 个答案:

答案 0 :(得分:1)

Where评估的表达式需要计算为布尔值。

where ( nv.StudentId = q.Where( p => p.Section.StudentId))

在这种情况下,您已经给它Guid。这就是错误的来源。我认为即使Where谓词有效,你也会遇到问题。从它的外观来看,您希望StudentId中的所有context.vw_Year_Plans都在q中。

一种简单的方法是在q中创建一个id的中间集合,以便进行比较。

var temp = q.Select(a => a.Section.StudentId);

然后查看每个StudentId是否也在context.vw_Year_Plans

var k = from nv in context.vw_Year_Plans
        where (temp.Contains(nv.StudentId)) 
        select nv;

有更好的方法可以解决这个问题,但这应该可以帮到你。

编辑

您提到在评论中使用join。我没有测试过这些解决方案,但这应该是你需要的。如果您仍然遇到问题,请使用有关您所面临问题的更具体详细信息更新您的问题。

var k = from nv in context.vw_Year_Plans
        join p in q on nv.StudentId equals p.Section.StudentId  
        select nv;