4

我想使用实体框架创建它。包含来自父项的字段和来自最新子记录的字段的新对象列表。我会将 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 不正确。是时候请来专家了。

4

2 回答 2

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
});
于 2014-10-03T20:22:42.403 回答
-2

这是一种方式,尽管有 2 个单独的数据库命中。您可以将第一个语句嵌入到第二个语句中,但这对我来说现在更复杂,因为我手头没有编译器。

var maxRevisionDate = context.PolicyTran.Max(x => x.RevisionDate);

var results = context.Policies.Where(x => x.PolicyTran.RevisionDate == maxRevisionDate 
               && x.HomeState == "NY").Include("PolicyTran")

我假设您的实体名称与您的数据库表相同。其结果是策略及其相应 PolicyTrans 的 IEnumerable。

于 2013-07-13T07:08:12.253 回答