簡體   English   中英

Lambda LINQ 查詢帶有多個 from 子句

[英]Lambda LINQ query with multiple from clauses

我有這個查詢

var myobjectList = from g in repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)
                   from d in daysOfWeek
                   select new myObject
                   {
                     DayID = (short?)d,
                     GoalA = g.GoalA,
                     GoalB = g.GoalB
                   };

其中daysOfWeek是一個枚舉數組。

private readonly DayOfWeek[] daysOfWeek = new DayOfWeek[]
{
    DayOfWeek.Sunday,
    DayOfWeek.Monday,
    DayOfWeek.Tuesday,
    DayOfWeek.Wednesday,
    DayOfWeek.Thursday,
    DayOfWeek.Friday,
    DayOfWeek.Saturday
};

所以,我需要將此查詢 sintax 轉換為 lamda 表達式。 我試試這個,但它錯了:(

var defaultSpeedGoals= repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null);
var myobjectList = SpeedGoals.Cast<SpeedGoalsRepository>()
                            .SelectMany(g => g.DbSet.Cast<DayOfWeek>().Select(sg => new myObject
                            {
                                DayID = (short?)sg,
                                GoalA= g.DbSet.FirstOrDefault().GoalA,
                                GoalB = g.DbSet.FirstOrDefault().GoalB
                            }));

您要查看的頁面在這里:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions

這是很多文字。 你特別想要的是:

帶有第二個 from 子句的查詢表達式,后跟 select 子句

from x1 in e1
from x2 in e2
select v

被翻譯成

( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => v )

讓我們將其應用於您的示例:

from g in repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)
from d in daysOfWeek
select new myObject
{
  DayID = (short?)d,
  GoalA = g.GoalA,
  GoalB = g.GoalB
};
  • x1g
  • e1repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)
  • x2d
  • e2daysOfWeek
  • vnew myObject...

所以把它們放在一起:

repository.SpeedGoalsRepository.DbSet
  .Where(e => e.ID == null) 
  .SelectMany(
    g => daysOfWeek, 
    (g, d) => new myObject { ... } )

我們完成了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM