簡體   English   中英

實體框架相關子查詢

[英]Entity Framework Correlated Sub-query

我想使用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不正確。 是時候打電話給專家了。

它不漂亮,但我相信這會讓你得到你想要的東西。

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
});

這是一種方式,雖然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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM