我想使用Entity Framework创建它。包含父项字段和最新子记录字段的新对象列表。我会将SQL编写为相关的子查询:
SELECT p.PolicyNumber, p.HomeState, pt.RevisionDate, pt.TranStatus
FROM dbo.Policy p
JOIN dbo.PolicyTran pt ON p.Id = pt.Policy_Id
AND pt.RevisionDate = (
SELECT MAX(mpt.RevisionDate)
FROM dbo.PolicyTran mpt
WHERE p.Id = pt.Policy_Id
)
WHERE p.HomeState = 'NY'
Policy的上下文已导航到事务列表(PolicyTran)。
var query = context.Policies.Include(t => t.PolicyTransactions);
无论我尝试什么,Linq都不正确或SQL不正确。是时候打电话给专家了。
答案 0 :(得分:0)
它并不漂亮,但我相信这可以让你得到你想要的东西。
var query = db.Policies
.Where(p => p.HomeState == "NY")
.Join(db.PolicyTrans,
p => p.Id,
t => t.Policy_Id,
(p, t) => new { P = p, T = t.OrderBy(tr => tr.RevisionDate).First() })
.Select(g => new {
PolicyNumber = g.P.PolicyNumber,
HomeState = g.P.HomeState,
TransStatus = g.P.TransStatus,
RevisionDate = g.T.RevisionDate
});
答案 1 :(得分:-1)
这是一种方式,尽管有2个单独的db命中。你可以将第一个语句嵌入到第二个语句中,但这对我来说更复杂,因为我没有编译器可以处理。
var maxRevisionDate = context.PolicyTran.Max(x => x.RevisionDate);
var results = context.Policies.Where(x => x.PolicyTran.RevisionDate == maxRevisionDate
&& x.HomeState == "NY").Include("PolicyTran")
我假设您的实体名称是SAME作为您的数据库表。其结果是IEnumerable of Policies及其相应的PolicyTrans。