[英]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
};
x1
是g
e1
是repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)
。x2
是d
e2
是daysOfWeek
v
是new myObject...
所以把它們放在一起:
repository.SpeedGoalsRepository.DbSet
.Where(e => e.ID == null)
.SelectMany(
g => daysOfWeek,
(g, d) => new myObject { ... } )
我們完成了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.