我需要通過 DamageCode 類中的 DamageCodeName 欄位來過濾一個串列。
public partial class DamageCategory
{
public string DamageCategoryId { get; set; }
public string CategoryName { get; set; }
}
public partial class DamageGroup
{
public string DamageGroupId { get; set; }
public string DamageCategoryId { get; set; }
public string GroupName { get; set; }
}
public partial class DamageCode
{
public string DamageCodeId { get; set; }
public string DamageGroupId { get; set; }
public string DamageCodeName { get; set; }
}
我使用 EF CORE 5 將記錄拉入串列:
private List<DamageCategory> _DamageCodeList { get; set; } = new();
_DamageCodeList = _contextDB.DamageCategories
.Include(i => i.DamageGroups)
.ThenInclude(d => d.DamageCodes).AsSingleQuery().ToListAsync();
現在我需要通過 DamageCode.DamageCodeName 屬性來過濾這個串列。
private string _SearchText { get; set; } = "Bubble";
private List<DamageCategory> _CategoryList { get; set; } = new();
_CategoryList = _DamageCodeList.Where(g => g.DamageGroups.SelectMany(c => c.DamageCodes
.Where(w => w.DamageCodeName.ToLower().Contains(_SearchText.ToLower()))).Any()).ToList();
上面的代碼只過濾了 DamageCategory。它帶回DamageGroup 的所有記錄和DamageCodes 的所有記錄。
我需要 linq 查詢結果來生成如下所示的串列(由“Bubble”過濾),并僅帶回由 DamageCode.DamageCodeName.Contains(“Bubble”) 過濾的 DamageCategory、DamageGroup 和 DamageCodes:

這是產生我需要的上述結果的 SQL:
SELECT
CT.[DamageCategoryID],
CT.[CategoryName],
DG.[DamageGroupID],
DG.[DamageCategoryID],
DG.[GroupName],
DC.[DamageCodeID],
DC.[DamageGroupID],
DC.[DamageCodeName]
FROM
[dbo].[DamageCategory] AS CT
INNER JOIN [dbo].[DamageGroup] AS DG ON CT.[DamageCategoryID] = DG.[DamageCategoryID]
INNER JOIN [dbo].[DamageCode] AS DC ON DG.[DamageGroupID] = DC.[DamageGroupID]
WHERE
DC.[DamageCodeName] LIKE '%Bubble%'
uj5u.com熱心網友回復:
這是查詢語法的亮點。
from dc in _contextDB.DamageCategories
from dg in dc.DamageGroups
from dc in dg.DamageCodes
where dc.DamageCodeName.Contains("Bubble")
select new
{
dc.DamageCategoryID,
dc.CategoryName,
dg.DamageGroupID,
dg.DamageCategoryID,
dg.GroupName,
dc.DamageCodeID,
dc.DamageGroupID,
dc.DamageCodeName
}
查詢形狀from ... from是等價于 的查詢語法SelectMany。
你ToLower在你的代碼中使用。那可能沒有必要。查詢被轉換為 SQL,如果資料庫欄位有不區分大小寫的排序規則,則不需要ToLower。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/392399.html
下一篇:C#分組物件未按預期進行變異
