我有這個查詢:
Project = await Context.Projects.Where(x => x.Id == project.Id)
.Select(x => new ProjectModel
{
Id = project.Id,
Name = project.Name,
TreeDataDict = x.Tasks.Select(y => new TreeItemModel()
{
NodeId = y.Id,
ParentId = SetTaskParentId(y, y.Type),
NodeTitle = y.Name,
Expanded = false,
Object = new TaskBaseModel
{
Milestone = y.Milestone,
StartDate = y.StartDate,
CurrentEndDate = y.CurrentEndDate,
EndDate = y.EndDate,
},
Icon = TaskHelper.GetTaskIcon(y.Type),
Children = new List<TreeItemModel>()
}).ToDictionary(y => y.NodeId, y => y)
}).SingleOrDefaultAsync();
也試過這樣:
Project = await Context.Projects.Where(x => x.Id == project.Id)
.Select(x => new ProjectModel
{
Id = project.Id,
Name = project.Name,
TreeDataDict = x.Tasks.ToDictionary(y => y.Id, y => new TreeItemModel(
{
NodeId = y.Id,
ParentId = SetTaskParentId(y, y.Type),
NodeTitle = y.Name,
Expanded = false,
Object = new TaskBaseModel
{
Milestone = y.Milestone,
StartDate = y.StartDate,
CurrentEndDate = y.CurrentEndDate,
EndDate = y.EndDate,
},
Icon = TaskHelper.GetTaskIcon(y.Type),
Children = new List<TreeItemModel>()
})
}).SingleOrDefaultAsync();
兩種方式我都得到了這個例外:

什么可能導致這種情況?有沒有一種方法可以讓我在不獲取串列然后將其轉換為字典的情況下完成這項作業?實作這一目標的最有效方法是什么?
問候
uj5u.com熱心網友回復:
什么可能導致這種情況?
ToDictionary不支持轉換嵌套呼叫(沒有可用的多載)。將其視為(許多)當前(在撰寫官方 v5.0.11 時最新)EF Core 缺點之一。
但有趣的是,在Dictionary<TKey, TValue>與建構式多載IEnumerable<KeyValuePair<TKey, TValue>>引數以及投影(Select),以KeyValuePair<TKey, TValue> 被支撐,這給解決方法-取代ToDictionary與上述構造和呼叫Select,例如(取代int與的型別Id)
TreeDataDict = new Dictionary<int, TreeItemModel>(
x.Tasks.Select(y => new TreeItemModel()
{
NodeId = y.Id,
ParentId = SetTaskParentId(y, y.Type),
NodeTitle = y.Name,
Expanded = false,
Object = new TaskBaseModel
{
Milestone = y.Milestone,
StartDate = y.StartDate,
CurrentEndDate = y.CurrentEndDate,
EndDate = y.EndDate,
},
Icon = TaskHelper.GetTaskIcon(y.Type),
Children = new List<TreeItemModel>()
})
.Select(e => new KeyValuePair<int, TreeItemModel>(e.NodeId, e)));
這將修復當前錯誤。但請注意,您使用的是其他不可翻譯的結構(自定義方法呼叫像SetTaskParentId(y, y.Type)和TaskHelper.GetTaskIcon(y.Type)其僅在最后的支持)Select,所以一定要確保不增加LINQ運營商一樣Where,OrderBy根查詢后等Select(x => new ProjectModel { ... },否則你會得到其他運行時錯誤。ToList,`首先
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/328523.html
下一篇:查詢串列中的陣列的簡單程式
