查询与LINQ to Entity Framework的关系

时间:2016-01-11 00:59:35

标签: c# entity-framework linq

以下是我的模型: enter image description here

我试图通过某个EventId计算不同的Assesors。

这是我尝试使用的代码:

var x = db.Assessors.Select(a => (a.Assessments.Select(y => y.EventFacility.EventId == 138))).Count();

不幸的是,我必须编码这个错误,因为我没有得到预期的结果(在这种情况下计数为9)我得到了错误的结果:35。

我想知道是否有人可以查看我的LINQ声明并告诉我我做错了什么?

2 个答案:

答案 0 :(得分:2)

您需要使用WhereAny,如下所示:

var result = db.Assessors
            .Where(a => a.Assessments.Any(y => y.EventFacility.EventId == 138));

这就是说,您希望所有评估者都是与该特定事件相关的任何评估的父母。

答案 1 :(得分:0)

你要向后看,从你所知道的事件开始(因为你有它的ID,所以你可以通过导航属性导航到你想要的东西。)

从模式中分辨出来是不可能的,因为它既不包含属性也不包含映射类型1:1? 1:N?无法从简单的线条中知道

它可能看起来像这样的东西

var x = db.Events
           .Where(ev=>ev.Id == 138)
           .SelectMany(ev=>ev.EventFacilities) //(i'm assumine possibly multiple and not 1 per event, once again schema doesn't show it, if it's not the case change SelectMany to Select)
           .SelectMany(ef=>ef.Assesments) // Same assumption as above
           .Select(as=>as.Assessor) // Asuming otherwise here, if wrong change Select to SelectMany
           .Distinct(); // Ignore duplicate assessors

请注意,您的问题不可能回答,这是最好的努力,但如果您需要帮助,您应该提供所有必需的信息,而不是删除不会立即显示的相关信息,它会是如果你拍摄实体图的实际截图而不是你制作的截图,那就容易多了。