我正在撰寫一個查詢,我想獲取我的一個串列中的內容以及另一個串列中的內容,我遇到了這個錯誤。

我的代碼在這里,當我輸入 join 而不是 left join 時,它作業正常,但我想要的值沒有出現,請幫助:D
var orgRolOlanDuyurular = _context.DuyuruOrgRol.Include(x=>x.Duyuru).ThenInclude(l => l.KL_DuyuruTur).Where(l => l.Duyuru.AktifMi);
var tumDuyurular = _context.Duyuru.Include(l => l.KL_DuyuruTur).Where(l => l.AktifMi);
var c = tumDuyurular.LeftJoin(orgRolOlanDuyurular,
tmDuyurular => tmDuyurular.Id,
orgOlanDuyurular => orgOlanDuyurular.DuyuruId,
(tmDuyurular, orgOlanDuyurular) => new DuyuruPaging{Id = tmDuyurular.Id, BaslangicTarihi = tmDuyurular.BaslangicTarihi, BitisTarihi = tmDuyurular.BitisTarihi, DuyuruTurAd = tmDuyurular.KL_DuyuruTur.Ad, Konu = tmDuyurular.Konu });
uj5u.com熱心網友回復:
左外連接是回傳第一個集合的每個元素的連接,無論它在第二個集合中是否有任何相關元素。您可以使用 LINQ 通過對組連接的結果呼叫 DefaultIfEmpty 方法來執行左外連接。
沒有與 T-SQL 完全相同的語法來使用左連接或右連接。但是,您可以利用類似的方法。
假設您有兩個物體。銷售訂單詳情和產品:
public partial class SalesOrderDetail
{
public int SalesOrderID { get; set; }
public short OrderQty { get; set; }
public int ProductID { get; set; }
public decimal UnitPrice { get; set; }
public decimal LineTotal { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder(1024);
sb.AppendLine($"Order ID: {SalesOrderID}");
sb.Append($" Product ID: {ProductID}");
sb.AppendLine($" Qty: {OrderQty}");
sb.Append($" Unit Price: {UnitPrice:c}");
sb.AppendLine($" Total: {LineTotal:c}");
return sb.ToString();
}
}
產品如下:
public partial class Product
{
public int ProductID { get; set; }
public string Name { get; set; }
public string Color { get; set; }
public decimal StandardCost { get; set; }
public decimal ListPrice { get; set; }
public string Size { get; set; }
// Calculated Properties
public int? NameLength { get; set; }
public decimal? TotalSales { get; set; }
public override string ToString()
{
StringBuilder sb = new StringBuilder(1024);
sb.Append(Name);
sb.AppendLine($" ID: {ProductID}");
sb.Append($" Color: {Color}");
sb.AppendLine($" Size: {(Size ?? "n/a")}");
sb.Append($" Cost: {StandardCost:c}");
sb.Append($" Price: {ListPrice:c}");
if (NameLength.HasValue)
{
sb.AppendLine($" Name Length: {NameLength}");
}
if (TotalSales.HasValue)
{
sb.AppendLine($" Total Sales: {TotalSales:c}");
}
return sb.ToString();
}
}
現在使用 DefaultIfEmpty() 和 SelectMany() 在 Products 和 Sales 之間執行左連接,如下所示:
var query = (from prod in Products
join sale in Sales
on prod.ProductID equals sale.ProductID
into sales
from sale in sales.DefaultIfEmpty()
select new
{
prod.ProductID,
prod.Name,
prod.Color,
prod.StandardCost,
prod.ListPrice,
prod.Size,
sale?.SalesOrderID,
sale?.OrderQty,
sale?.UnitPrice,
sale?.LineTotal
}).OrderBy(ps => ps.Name);
如果您希望使用方法語法,您可以按照以下代碼獲得相同的結果:
var query = Products.SelectMany(
sale =>
Sales.Where(s => sale.ProductID == s.ProductID).DefaultIfEmpty(),
(prod, sale) => new
{
prod.ProductID,
prod.Name,
prod.Color,
prod.StandardCost,
prod.ListPrice,
prod.Size,
sale?.SalesOrderID,
sale?.OrderQty,
sale?.UnitPrice,
sale?.LineTotal
}).OrderBy(ps => ps.Name);
現在您可以使用一個簡單的 foreach 回圈,如下所示:
foreach (var item in query)
{
count ;
sb.AppendLine($"Product Name: {item.Name} ({item.ProductID})");
sb.AppendLine($" Order ID: {item.SalesOrderID}");
sb.AppendLine($" Size: {item.Size}");
sb.AppendLine($" Order Qty: {item.OrderQty}");
sb.AppendLine($" Total: {item.LineTotal:c}");
}
有關更多資訊,您可以訪問https://docs.microsoft.com/en-us/dotnet/csharp/linq/perform-left-outer-joins
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/438716.html
上一篇:如何將引數從視圖提供給控制器?
