簡體   English   中英

需要將左連接 SQL 轉換為 linq 查詢 - 幫助表示贊賞

[英]Need to convert Left join SQL to linq query - help appreciated

這是我的代碼,我遇到的問題是 On 子句中的小於比較......因為 Linq 不允許這樣做......當我將其中一個字段與 null 進行比較時,向下遷移到 where 子句將不起作用。

這是 sql 查詢(現在 a.UserID= 是硬編碼的)

SELECT A.Policy, A.Comments, A.EventDTTM, A.Status, A.Reason, A.FollowUp
                FROM PP_PolicyActivity A
                LEFT JOIN PP_PolicyActivity B
                ON(A.Policy = B.Policy AND A.EventDTTM < B.EventDTTM)
                WHERE A.UserID = 'Ixxxxxx' 
                AND B.EventDTTM IS NULL AND a.status = 'open - Pending'
                order by A.EventDTTM DESC

我需要上述查詢的結果集作為 IEnumerable 列表來填充視圖

我的任務是重建一個舊的 VB ASP NET,它背后有一組常設生產數據庫......我沒有更改數據庫設計的選項。 我連接到服務器和數據庫,這個查詢是針對該數據庫上的一個表......該模型還反映了實際表的布局。

問題在於 A.EventDTTM < B.EventDTTM - 我無法將其移至 where 子句,因為我還必須在 where 子句中處理 B.EventDTTM IS NULL。 我需要以某種方式重新調整查詢,以便它對 'linq' 友好

 public class PolicyActivityModel
    {
        public string Policy { get; set; }
        public int PolicyID { get; set; }

        public string Status { get; set; }

        public string Reason { get; set; }

        public string Comments { get; set; }

        public DateTime EventDTTM { get; set; }

        public string UserID { get; set; }

        public DateTime FollowUp { get; set; }
    }

公司政策禁止我顯示連接字符串。

我對 Linq 非常陌生,非常感謝任何幫助

謝謝你

從數據庫中獲取策略后,您可以使用導航屬性。

var policy = DbContext.First(x => x.Id == 1000);
var otherPolicies = policy.ConnectedPolicies.Where(p => ...);

自連接很奇怪,但這是對 Linq 最直接的翻譯:

var query = from leftPP in PP_PolicyActivity 
     join rightPP in PP_PolicyActivity
          on new { Policy = leftPP.Policy, EventDTTM = leftPP.EventDTTM } 
          equals new { Policy = rightPP.Policy, EventDTTM = rightPP.EventDTTM }
          into pp from joinedRecords.DefaultIfEmpty()
where leftPP.UserId == 1 
      && leftPP.EventDTTM < rightPP.DTTM)
      && rightPP.EventDTTM == null 
      && leftPP.status = "open - Pending"
select new
{
    leftPP,
    rightPP
}

我免費輸入了這個,沒有模型或智能感知,因此可能會有一些較小的錯誤。

您可以在該子句中添加 order by,但它仍然是 IQeryable,所以我會保留它。

然后,獲取模型列表:

var results = query.OrderByDescending(x => x.EventDTTM).ToList();

實際的連接是第 2、3、4 和 5 行。它是 SQL 的冗長和“倒退”,最重要的是使用匿名類型。 訪問單個屬性將類似於:

 results[0].leftPP.PolicyId

暫無
暫無

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

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