如何将此查询转换为方法语法?

时间:2014-04-11 07:51:00

标签: c# .net linq methods syntax

我很好奇现在如何转换此查询语法:

Esperienze = (from e in Esperienze
             from p in e.PeriodiValidita.Cast<PeriodoValidita>()
             where UiUtils.IntersectDatesRanges(DateTime.Parse(p.ValidoDal), DateTime.Parse(p.ValidoAl), DataInizioDT, DataFineDT)
             select e).Distinct();

到LINQ中的方法语法。 .SelectMany

1 个答案:

答案 0 :(得分:4)

根据this我得到了

Esperienze
    .SelectMany(e => e.PeriodiValidita.Cast<PeriodoValidita>(), (e, p) => new { e, p })
    .Where(τ0 => UiUtils.IntersectDatesRanges(
        DateTime.Parse(τ0.p.ValidoDal),
        DateTime.Parse(τ0.p.ValidoAl),
        DataInizioDT,
        DataFineDT))
    .Select(τ0 => τ0.e)
    .Distinct()

查询加上Distinct

在规范中,您正在寻找 7.16.2.4 7.16.2.4 From,let,where,join和orderby子句的 部分 p>

  

带有第二个from子句的查询表达式,后跟select子句以外的其他内容:

from x1 in e1
from x2 in e2
…
  

被翻译成

from * in ( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => new { x1 , x2 } )
…