假設我有以下物體。
class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
class ProductAlias
{
public int ProductId { get; set; }
public string Alias { get; set; }
}
給定一個產品 ID,我如何為該產品創建一個包含該產品Name本身在單個查詢中的所有別名的串列?
我不知道我是否可以執行以下操作。此語法不起作用,因為Union()不采用 lambda 運算式。
DbContext.Products
.Where(p => p.Id == productId)
.Select(p => p.Name)
.Union(p => p.ProductAliases.Select(a => a.Alias))
.ToList();
uj5u.com熱心網友回復:
嘗試以下操作:
var products = DbContext.Products
.Where(p => p.Id == productId);
products
.Select(p => p.Name)
.Union(products.SelectMany(p => p.ProductAliases.Select(a => a.Alias)))
.ToList();
uj5u.com熱心網友回復:
Id在和上加入兩個表ProductId,選擇所有需要的屬性(Id、Name、Alias)并在 上過濾Id。
products
.Join(aliases, p => p.Id, a => a.ProductId, (p,a) => new { p.Name, p.Id, a.Alias})
.Where(p => p.Id == productId);
另一種形式:
(from p in products
join a in aliases on p.Id equals a.ProductId
select new
{
p.Name,
p.Id,
a.Alias
})
.Where(p => p.Id == productId);
結果(使用 LINQ2Object 進行測驗,但它也適用于 LINQ2SQL):

uj5u.com熱心網友回復:
您可以像這樣執行相當于 SQL Server 的 unpivot
DbContext.Products
.Where(p => p.Id == productId)
.SelectMany(p => p.ProductAliases.Select(a => a.Alias).Append(p.Name))
.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/442853.html
標籤:C# 实体框架 林克 .net-core .net-6.0
