我將物體框架核心與 SQL 資料庫中所有表的模型一起使用。
我有一個從表中提取行的 linq 查詢 - 我們稱之為設施。然后,我使用 fornext() 迭代查詢的結果(不要問):) 在回圈中,我們從與設施相關的各種其他表中提取資料。顯然,這是一個巨大的性能問題,因為設施中最多可以有 100 行,這意味著每次回圈為我們從中提取的每個附加表迭代時都會查詢資料庫。請注意,某些表來自另一個資料庫,您不能在背景關系之間進行連接。已經試過了。
所以,我心里想,讓我們在處理回圈之前從相關表中提取所有行。這樣,我們只為每個關聯表呼叫一次這些資料庫。
var pracloc = _ODSContext.AllPractitionerLocations
.Where(l => l.AllPractitionerLocationID != 0);
而且,這作業得很好。
下一步,讓我們簡化代碼并將其中一些 db 呼叫提取到類中的私有方法中。
例如:
這是我呼叫方法的地方(這取代了上面的行)。
var pracloc = GetAllPractitionerLocationsDTO();
這是方法。
private AllPractitionerLocationsDTO GetAllPractitionerLocationsDTO()
{
AllPractitionerLocationsDTO dto = new();
dto.MyList = new List<AllPractitionerLocationDTO>();
var myo = _ODSContext.AllPractitionerLocations
.Where(s => s.AllPractitionerLocationID != 0)
.Select(g => new AllPractitionerLocationDTO()
{
AllPractitionerLocationID = g.AllPractitionerLocationID
});
dto.MyList = myo.ToList();
return dto;
}
這是后續過濾器(在上面的兩個資料查詢之間沒有變化):
var PracLocation = pracloc
.Where(a => a.LocationID = provider.LocationID)
.FirstOrDefault();
而且,只要我像上面的第一行一樣直接查詢資料庫來提取資料,這就能正常作業。
當我嘗試在方法中提取資料時,上面的行拋出:
“AllPractitionerLocationsDTO”不包含“Where”的定義,并且找不到接受“AllPractitionerLocationsDTO”型別的第一個引數的可訪問擴展方法“Where”(您是否缺少 using 指令或程式集參考?)
AllPractitionerLocationsDTO 是一個模型類,其中包含“真實”模型中的行子集:
public class AllPractitionerLocationDTO
{
public int SRCAllPractitionerLocationID { get; set; }
public int AllPractitionerLocationID { get; set; }
}
public class AllPractitionerLocationsDTO
{
public List<AllPractitionerLocationDTO> MyList;
}
既然它在結構上與實際的 DB 表相同,為什么 where 子句不起作用?或者,我如何在模型類中實作我自己的位置?
我什至嘗試將 dbset<> 添加到背景關系中。還是沒用
public virtual DbSet<AllPractitionerLocationDTO> AllPractitionerLocationDTOs { get; set; }
請幫幫我。
uj5u.com熱心網友回復:
你必須從你的方法中回傳 IQueryable 。只有在這種情況下,您可以稍后重用它并有效過濾:
private IQueryable<AllPractitionerLocationDTO> GetAllPractitionerLocationsDTO()
{
var query = _ODSContext.AllPractitionerLocations
.Where(s => s.AllPractitionerLocationID != 0)
.Select(g => new AllPractitionerLocationDTO
{
AllPractitionerLocationID = g.AllPractitionerLocationID
});
return query;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/318194.html
標籤:sql-server asp.net-mvc 林克 实体框架核心
上一篇:將靜態列添加到動態LINQ查詢
下一篇:linqgroupby和最大計數
