如何解决Linq查询可在子实体上实现where子句-EF Core
我想做的事情应该很简单,但是我无法解决!
我有一个名为 Players 的父实体和一个名为 PlayerTrainingEvents 的子实体。 (PlayerTrainingEvents实际上是一个联接表,但在此示例中,涉及的两个表不多)。
我想带回 所有 玩家(不仅仅是具有相关PlayerTrainingEvent的玩家) AND 给定TrainingEventID的相关PlayerTrainingEvents。
这些是(简化的)实体及其关系:
以下是一些示例数据:
使用上面的示例数据,如果我想显示所有带有TrainingEventID 3的PlayerTrainingEvent的玩家,我应该得到以下结果:
在SQL中,这非常简单:
SELECT *
FROM Players p
left join PlayerTrainingEvents pte on p.ID = pte.PlayerID and pte.TrainingEventID = 3
在Linq,我能得到的最接近的是:
var results = await _context.Players
.Include(p => p.PlayerTrainingEvents.Where(pte => pte.TrainingEventID == id)).ToListAsync();
...但是上述代码导致错误:“ InvalidOperationException:在Include中使用的Lambda表达式无效”。
您可能会说,我对EF还是很陌生。在SQL中轻松实现了我想要的任何功能后,我正在努力使EF简化工作!
我们将不胜感激任何帮助。
解决方法
感谢我收到的答案/评论。我设法使以下查询工作。这将首先查询Player,然后使用PlayerTrainingEvents执行外部联接。
from p in Players
join pte in PlayerTrainingEvents on new { PlayerId = p.ID,TrainingEventID = 3 }
equals new { PlayerId = pte.PlayerID,TrainingEventID = pte.TrainingEventID } into ptes
from pte in ptes.DefaultIfEmpty()
select new { p.ID,pte.TrainingEventID,pte.AttendanceCode }
对于非常简单的SQL查询,这似乎有很多代码。我仍然认为SQL更容易,但是也许我只需要做一些学习即可!如果有人有更好的解决方案,我将非常有兴趣看到它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。