我有幾個關于 lambda 過濾性能的問題。
這是我的代碼:
public class supplier
{
public Guid supplier_id { get; set; }
public string supplier_name { get; set; }
public Guid township_id { get; set; }
}
public class township
{
public Guid township_id { get; set; }
public string township { get; set; }
}
這是我的 dto 課程:
public class supplier_dto
{
public Guid supplier_id { get; set; }
public string suppliername { get; set; }
public Township township { get; set; }
}
那么為什么我使用 Linq 過濾串列:
var supplier_list = (from sup on _dbcontext.suppliers
join twn on _dbcontext.townships on sup.township_id equals twn.township_id
select new supplier_dto
{
supplier_id = sup.supplier_id,
suppliername = sup.supplier_name,
township = getTownshipById(twn.township_id)
}).ToList();
如果供應商很多,會不會影響業績?有沒有辦法不使用getTownshipById函式?
BR, 杰姆
uj5u.com熱心網友回復:
您的課程有幾個問題。township首先,我假設您在和之間具有一對多的關系suppliers,這通常由資料庫中的外鍵表示。因此,您必須在模型中具有類似的關系:
public class supplier
{
public Guid supplier_id { get; set; }
public string supplier_name { get; set; }
public Guid TownshipId { get; set; }
public Township township { get; set; }
}
public class Township
{
public Guid TownshipId { get; set; }
public string name { get; set; }
public ICollection<supplier> suppliers { get; set; }
}
如果是這種情況,您可以重寫 LINQ 陳述句:
var supplier_list = (from sup in _dbcontext.suppliers
select new supplier_dto
{
supplier_id = sup.supplier_id,
suppliername = sup.supplier_name,
township = sup.township
}).ToList();
只需確保township通過急切或顯式加載實際加載。一般來說,如果您需要join在 LINQ 陳述句中使用,我認為它是代碼異味。
其次,LINQ 查詢的性能取決于它生成的查詢。你貼上 .NET 3.1 的標簽。在 .NET 5 中,您可以使用簡單的 APIToQueryString()來獲取結果查詢;但即使在 3.1 中,您也可以通過更多努力來生成它。
最后,與你的問題無關lambda
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426631.html
標籤:实体框架 林克 拉姆达 asp.net-core-3.1
