[英]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 所需的結果如下面的屏幕截圖所示。
[
我在 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.