我有这个查询
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
};
Run Code Online (Sandbox Code Playgroud)
daysOfWeek枚举数组在哪里。
private readonly DayOfWeek[] daysOfWeek = new DayOfWeek[]
{
DayOfWeek.Sunday,
DayOfWeek.Monday,
DayOfWeek.Tuesday,
DayOfWeek.Wednesday,
DayOfWeek.Thursday,
DayOfWeek.Friday,
DayOfWeek.Saturday
};
Run Code Online (Sandbox Code Playgroud)
因此,我需要将此查询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
}));
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 10
您要查看的页面在这里:
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/language-specification/expressions
有很多文字。您想要的具体位是:
具有第二个from子句和一个select子句的查询表达式
from x1 in e1
from x2 in e2
select v
Run Code Online (Sandbox Code Playgroud)
被翻译成
( e1 ) . SelectMany( x1 => e2 , ( x1 , x2 ) => v )
Run Code Online (Sandbox Code Playgroud)
让我们将其应用于您的示例:
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
};
Run Code Online (Sandbox Code Playgroud)
x1 是 ge1是repository.SpeedGoalsRepository.DbSet.Where(e => e.ID == null)。 x2 是 de2 是 daysOfWeekv 是 new myObject ...所以放在一起:
repository.SpeedGoalsRepository.DbSet
.Where(e => e.ID == null)
.SelectMany(
g => daysOfWeek,
(g, d) => new myObject { ... } )
Run Code Online (Sandbox Code Playgroud)
我们完成了。