簡體   English   中英

編寫等效的 SQL Select 語句,在 LINQ 中使用 2 個左連接

[英]Write the equivalent SQL Select statement with 2 Left Join in LINQ

我需要將下面的 SQL select 語句轉換為其等效的 LINQ 語句。

SQL 聲明:

SELECT MainTitles.Title,
    SubTitles.Title,
    ContentResources.ResourceContent,
    SubTitles.MainTitleId,
    SubTitles.SubTitleId
FROM ContentResources
LEFT JOIN MainTitles on ContentResources.MainTitleId = MainTitles.MainTitleId
LEFT JOIN SubTitles on ContentResources.ContentResourceId = SubTitles.ContentResourceId

表樣:

帶有樣本數據的表結構

聲明結果:

使用 SQL 所需的結果如下面的屏幕截圖所示。

[上面SQL語句的查詢結果

我在 LINQ 中嘗試過什么

var resources = (from c in _context.ContentResources
                 join m in _context.MainTitles
                 on c.MainTitleId equals m.MainTitleId into ResultTable1
                 from result in ResultTable1.DefaultIfEmpty()

                 join s in _context.SubTitles
                 on c.ContentResourceId equals s.SubTitleId
                 on c.ContentResourceId equals s.SubTitleId into ResultTable2

                 from result2 in ResultTable2.DefaultIfEmpty()
                 select new
                 {
                     c.ResourceContent,
                     c.ContentResourceId,
                     c.MainTitleId,
                     result.Title,
                     s.SubTitle
                  }).ToList();

請幫我。 我已經看到了 1 Left Join,這就是我能夠嘗試上面的內容的方式。 我什至嘗試過免費版本的 LINQPad7,但我不知道如何使用它將 SQL 轉換為 LINQ。 提前致謝。

我會使用實體框架的實體加載。

https://docs.microsoft.com/en-us/ef/ef6/querying/related-data

更新您的模型以包含虛擬模型:

public class ContentResource
{
    public virtual MainTitle MainTitle { get; set; }
    public virtual SubTitle SubTitle { get; set; }
}

然后你可以創建一個這樣的查詢:

var resources = _context.ContentResource
    .Include(x => x.MainTitle)
    .Include(x => x.SubTitle)
    .Select(x => new
    {
        ResourceContent = x.ResourceContent,
        ContentResourceId = x.ContentResourceId,
        MainTitleId = x.MainTitle.MainTitleId,
        MainTitle = x.MainTitle.Title,
        SubTitle = x.SubTitle.SubTitle
    })
    .ToList();

試試下面的。 它未經測試,但這是在 LINQ 中完成多個連接的方式。

var resources = from c in _context.ContentResources 
             join m in _context.MainTitles on c.MainTitleId equals m.MainTitleId
             join s in Context.SubTitles on m.ContentResourceId equals s.ContentResourceId 
             select new {
                 c.ResourceContent,
                 c.ContentResourceId,
                 m.MainTitleId,
                 s.Title,
                 s.SubTitle }).ToList();

暫無
暫無

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

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