这个Linq查询语法可以正常工作并返回我需要的内容,但我希望使用Method语法理解等效查询。
from r in Resources
from t in r.Teams
where t.Id ==1
select r
资源表和团队表有多对多的关系。
流利或方法语法是什么?
答案 0 :(得分:1)
Resources
.SelectMany(x => x.Teams, (resource, team) => new { Resource = resource, Team = team })
.Where(x => x.Team.Id == 1)
.Select(x => x.Resource);
答案 1 :(得分:0)
此查询有效:
Teams.Where(t => t.Id == 1).SelectMany(r => r.Resources)
答案 2 :(得分:0)
两个from子句相当于SelectMany运算符。但在这种情况下,它将是SelectMany运算符的重载,它还在每个元素上调用结果选择器函数:
public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
this IEnumerable<TSource> source,
Func<TSource, IEnumerable<TCollection>> collectionSelector,
Func<TSource, TCollection, TResult> resultSelector
)
它不仅可以压缩资源序列,还可以生成包含资源和团队
的新序列Resources.SelectMany(r => r.Teams, (r,t) => new { r, t })
.Where(x => x.t.Id == 1)
.Select(x => x.r)
注意:如果您不尝试将查询语法转换为方法语法,但只关注相同的结果,那么您也可以使用以下查询(如果资源团队中存在重复,结果会略有不同 - 您将不能通过此查询获得重复的资源)
Resources.Where(r => r.Teams.Any(t => t.Id == 1))