我收到以下异常:
不支持嵌套查询。操作 1='案例' 操作 2='收集'
通过这个查询
var Games = context.Games.Select(a => new GameModel
{
Members = (a.Type == 1 ? (a.UsersInGames.Where(b => b.GameID == a.ID && b.StatusID == 1).Select(c => new Member
{
ID = c.UserID,
email = c.UserInfo.EmailAddress,
screenName = c.UserInfo.ScreenName
})) :
(a.Teams.Where(b => b.GameID == a.ID).SelectMany(b => b.UsersInTeams.Where(c => c.StatusID == 1)).Select(d => new Member
{
ID = d.UserID,
email = d.UserInfo.EmailAddress,
screenName = d.UserInfo.ScreenName
)))
})
当我在选择成员时不包含条件时,查询工作正常。有没有办法可以在查询中执行条件?
您高估了 LINQ 到 SQL 转换的能力。并非所有内容都是可翻译的,并且由于 LINQ 的工作方式,因此不会出现编译器警告。
嵌套集合通常要么 a) 不受支持,要么 b) 最终导致可怕的 SELECT N+1 查询。你要求 EF 做的就是返回一个对象树。SQL 不支持树状结果所以你会遇到对象关系阻抗不匹配的情况,这很痛苦。
我建议您将嵌套集合数据作为第二个完全独立的查询来获取。这使您可以更好地控制并保证有效。
作为一个非必要的旁注,您可能无法说服 EF 在序列上使用 ?: 运算符。这很难翻译。想象一下如何将其编写为 SQL - 非常困难且复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)