[英]Lambda LINQ query with multiple from clauses
I've got this query我有这个查询
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
};
where daysOfWeek
is an enum array.其中
daysOfWeek
是一个枚举数组。
private readonly DayOfWeek[] daysOfWeek = new DayOfWeek[]
{
DayOfWeek.Sunday,
DayOfWeek.Monday,
DayOfWeek.Tuesday,
DayOfWeek.Wednesday,
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Saturday
};
so, I need to convert this query sintax to lamda expression.所以,我需要将此查询 sintax 转换为 lamda 表达式。 I try with this, but its wrong:(
我试试这个,但它错了:(
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
}));
The page you want to look at is here:您要查看的页面在这里:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions
It's a lot of text.这是很多文字。 The bit you want specifically is:
你特别想要的是:
A query expression with a second from clause followed by a select clause
带有第二个 from 子句的查询表达式,后跟 select 子句
from x1 in e1
from x2 in e2
select v
is translated into
被翻译成
( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => v )
Let's apply that to your example:让我们将其应用于您的示例:
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
is g
x1
是g
e1
is repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)
. e1
是repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)
。x2
is d
x2
是d
e2
is daysOfWeek
e2
是daysOfWeek
v
is new myObject...
v
是new myObject...
So put it all together:所以把它们放在一起:
repository.SpeedGoalsRepository.DbSet
.Where(e => e.ID == null)
.SelectMany(
g => daysOfWeek,
(g, d) => new myObject { ... } )
and we're done.我们完成了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.