[英]Is there a way to write this LINQ query using lambda expressions?
我有一个linq查询,使用2个联接从3个表中获取数据。 我更喜欢将其编写为lambda表达式,以便我的团队发现它更具可读性。 有办法吗? 我找不到任何合适的例子。
var q = (
from sus in susManager.Get()
join su in suManager.Get() on sus.SUId equals su.Id
join p in pManager.Get() on su.PId equals p.Id
where sus.EndTimeStamp >= oneDayAgo
select new
{
Name = p.FirstName + " " + p.LastName,
Email = su.Email,
LastLogIn = sus.StartTimeStamp,
LastSessionDurationInMinutes =
DbFunctions.DiffMinutes(sus.StartTimeStamp, sus.EndTimeStamp),
LastActive = sus.EndTimeStamp
}).ToList();
假定Get()
函数返回List
,则等效的lambda如下所示:
var q = systemUserSessionManager.Get()
.Where(sus => sus.EndTimeStamp >= oneDayAgo)
.Join(systemUserManager.Get(),
sus => sus.SystemUserId,
su => su.Id,
(sus, su) => new { sus, su })
.Join(personManager.Get(),
j => j.su.PersonId,
p => p.Id,
(j, p) => new { sus = j.sus, su = j.su, p })
.Select(x => new
{
Name = p.FirstName + " " + p.LastName,
Email = su.Email,
LastLogIn = sus.StartTimeStamp,
LastSessionDurationInMinutes =
DbFunctions.DiffMinutes(sus.StartTimeStamp, sus.EndTimeStamp),
LastActive = sus.EndTimeStamp
})
.ToList();
试试这个
var q = (
from sus in systemUserSessionManager.Get()
join su in systemUserManager.Get() on sus.SystemUserId equals su.Id
join p in personManager.Get() on su.PersonId equals p.Id
select new { sus = sus, su = su, p = p})
.Where(x => x.sus.EndTimeStamp >= oneDayAgo)
.Select(x => new {
Name = x.p.FirstName + " " + x.p.LastName,
Email = x.su.Email,
LastLogIn = x.sus.StartTimeStamp,
LastSessionDurationInMinutes =
DbFunctions.DiffMinutes(x.sus.StartTimeStamp, x.sus.EndTimeStamp),
LastActive = x.sus.EndTimeStamp
}).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.