我们正在将SQL /存储过程转换为LINQ to Entities语句。
目前我正在转换此SQL:
declare @startDate DateTime
set @startDate = DATEADD(DD, -30, GETDATE())
select h.*
from History h (nolock)
inner join Quote q (nolock) on h.QuoteID = q.QuoteID
inner join Agency (nolock) a on q.AgencyID = a.AgencyID
inner join DC_PLT_EntityRoles er (nolock) on a.AgencyID = er.EntityID
inner join DC_PLT_Roles (nolock) r on er.RoleID = r.RoleID
where
q.Status = 'Inforce'
and q.LOB = 'Vacant'
and q.EffectiveDate > @startDate
and h.Deleted is null
and h.DeprecatedBy is null
and h.TransactionStatus = 'Committed'
and r.Name = 'Wholesaler'
这是我写的LINQ to Entities:
var startDate = DateTime.Today.AddDays(-30);
var results = (from h in Histories
.Include("Quote")
.Include("Quote.Agency")
.Include("Quote.Agency.DC_PLT_Roles")
where h.Quote.Status == "Inforce" &&
h.Quote.LOB == "Vacant" &&
h.Quote.EffectiveDate > startDate &&
h.Deleted == null &&
h.DeprecatedBy == null &&
h.TransactionStatus == "Committed" &&
h.Quote.Agency.DC_PLT_Roles.All(r => r.Name == "Wholesaler")
select h).ToList();
问题是SQL返回77行而我的LINQ没有返回。
任何人对如何正确转换这个有任何想法?或者我错过了什么。
感谢您的帮助。
R
答案 0 :(得分:1)
h.Quote.Agency.DC_PLT_Roles.All(r => r.Name == "Wholesaler")
我认为这一行是你的问题。我很确定你想在这里使用Any
All
。在这种情况下,All
表示代理商的所有DC_PLT_Roles必须具有Name == "Wholesaler"
。 Any
表示代理商必须有一个DC_PLT_Role Name == "Wholesaler"
。
答案 1 :(得分:0)
您可能还想查看关于(nolock)语句的内容:
http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx