我正在嘗試通過三個步驟在我的資料庫中查詢一條記錄,但在獲取我正在尋找的結果時遇到了問題。這些是我創建的步驟:
client = client
.Where(s => s.CompanyName.Contains(name));
var res = client.Select(x => x.ID);
Tracker = Tracker
.Where(s => s.ClientId.Equals(client.Select(x => x.ID)));
除錯代碼表明第一步和第二步作業正常,并生成了我運行第三個查詢所需的資料,這應該提供整個記錄,利用第二步的結果。
第三步也是最后一步產生了以下錯誤:
“
DbSet<TimeTrackerViewModel>().Where(t => t.ClientId.Equals(DbSet<ClientsViewModel>().Where(c => c.CompanyName.Contains(__name_0)).Select(c => c.ID)))無法翻譯 LINQ 運算式。要么以可翻譯的形式重寫查詢,要么通過插入對“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的呼叫顯式切換到客戶端評估。請參閱https://go.microsoft.com/fwlink/?linkid=2101038了解更多資訊。”
如何利用第二步的查詢結果查詢我的資料庫?
uj5u.com熱心網友回復:
如果要使用IDs inres進行過濾Tracker,則可以使用Any():
var res = client.Select(x => x.ID);
trackers = Tracker.Where(s => res.Any(r => r == s.ClientId));
上面的查詢將回傳一個集合。
我正在嘗試在我的資料庫中查詢一條記錄
如果你想回傳一條記錄,那么你可以使用FirstOrDefault(),代替Where子句(使用相同的謂詞),或者在之后Where(你可以考慮Single()是否知道有 1 個匹配的記錄)。但是您還應該考慮如果多個記錄與name您的第一個查詢中的引數匹配,您會發生什么,以及您將如何處理它。
uj5u.com熱心網友回復:
你應該試試這個:
var trakers = (from c in client.Where(s => s.CompanyName.Contains(name))
join t in tracker
on c.ID
equals t.ClientId
select t).ToList();
所以你只對 db 進行查詢。
uj5u.com熱心網友回復:
在閱讀了幾篇相關文章后,我能夠將他們的想法組合成一個作業解決方案,如下所示:
var client = _context.ClientsViewModel
.Where(s => s.CompanyName.Contains(name))
.Select(x => x.ID).ToList();
Tracker = Tracker
.Where(s => s.ClientId == client[0])
.OrderByDescending(x => x.Id);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454027.html
