我有以下查詢
return _context.Table1
.Where(x => x.ContactId == contactKey.Id)
.Include(x => x.Table2)
.Include(x => x.Table3.Table4)
.Select(a =>
new MyReadModel
{
PriorityAssignment = true,
LastContactedDate = (a.Table3.Table4 != null && a.Table3.Table4.FirstOrDefault(h =>
h.Id == a.Table2.FkId
) != null ?
a.Table3.Table4.FirstOrDefault(h => && h.Id == a.Table2.FkId
).LastContactedDatetime : default
)
}
)
.ToListAsync();
我想要的是在選擇中簡化 LastContactedDate 分配。我想我們可以分配
a.Table3.Table4.FirstOrDefault(h =>
h.Id == a.Table2.FkId
)
對于某些變數但無法做到的人可以確定需要什么
uj5u.com熱心網友回復:
使用 EF Core,您不必檢查 null,LINQ Translator 不會執行您的代碼,而是使用它來轉換為 SQL。如果您不檢索整個物件,也不需要包含。
return await _context.Table1
.Where(x => x.ContactId == contactKey.Id)
.Select(a => new MyReadModel
{
PriorityAssignment = true,
LastContactedDate = (DateTime?)a.Table3.Table4.Where(h => h.Id == a.Table2.FkId)
.OrderByDescending(h => LastContactedDatetime)
.Select(h => LastContactedDatetime)
.FirstOrDefault()
}).ToListAsync();
uj5u.com熱心網友回復:
你可以像這個例子一樣使用它
List<string> someList= new List<string>();
someList= someList.Select(x =>
{
var newVariable= "newVariable";
return newVariable;
}).ToList();
在你的情況下
return _context.Table1
.Where(x => x.ContactId == contactKey.Id)
.Include(x => x.Table2)
.Include(x => x.Table3.Table4)
.Select(a => {
Table4 newVariable = null;
if(a.Table3.Table4 != null)
newVariable = a.Table3.Table4.FirstOrDefault(h => h.Id == a.Table2.FkId;
var result = new MyReadModel
{
PriorityAssignment = true,
LastContactedDate = (newVariable != null ? newVariable.LastContactedDatetime : default
)
};
}
) .ToListAsync();
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521693.html
標籤:C#林克实体框架核心
上一篇:SQL查詢等于linq
