[英]LINQ Query - Selecting a key based upon the value having a property that matches a string?
[英]Passing List of KeyValuePairs to LINQ query and selecting the Value for the Key that matches the entity's Id
解決這個問題的最佳方法是什么?
TL;DR 版本:
使用 LINQ 和 EntityFramework 我試圖將KeyValuePair
的List
傳遞給 LINQ 查詢,然后對於 ID 與列表中的任何鍵匹配的每個實體,選擇具有該鍵值的新列。
所以如果我的KeyValuePair
是
List<KeyValuePair(int, long)> keyValuePairs = new()
{
new(1, 10),
new(2, 20),
new(3, 30)
}
其中鍵是EmployeeId
,值是CompanyId
,
我正在查詢一個Employees表,它有兩列, Id
和Name
,
我的EmployeeModel
class 是
public int Id;
public int Name;
public long CompanyId;
我想做這樣的事情:
var keys = keyValuePairs.Select(x => x.Key);
IQueryable<EmployeeModel> EmployeeModels = Db.Employees
.Where(e => keys.Contains(p.Id))
.Select(e => new EmployeeModel
{
Id = e.Id,
Name = e.Name,
CompanyId = keyValuePairs.Where(x => x.Key == e.Id).Select(x => x.Value).First()
});
目前我得到這個例外:
無法翻譯 LINQ 表達式“x”。 以可翻譯的形式重寫查詢,或通過插入對“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的調用顯式切換到客戶端評估。
我想避免將其加載到 memory 中,因為結果可能有數十萬。 另外,我需要將結果傳遞給需要 IQueryable 的方法
了解我正在嘗試做什么的更多上下文(也許有人可以看到這是否是 xy 問題):
我有兩個數據庫數據庫 A 有一個名為 Companies 的表和一個名為 CompanyEmployees 的連接表
數據庫 B 有一個名為 Employees 的表 Employee 表有一個 Employee Id 列,但沒有 Company Id 列
但是,我的EmployeeModel
class 具有員工所屬公司的CompanyId
的道具。 我正在嘗試加載員工列表,並選擇包含CompanyId
的EmployeeModel
我試圖完成的方法是將KeyValuePair
的列表加載到 memory 中,其中Key = CustomerEmployee.EmployeeId
和Value = CustomerEmployee.CustomerId
,然后使用該列表查詢另一個 Db。 (我沒有看到將KeyValuePair
列表加載到 memory 的任何替代方法,即使我顯然不想這樣做)
你也可能對這部分有問題:
CompanyId = keyValuePairs.Where(x => x.Key == e.Id).Select(x => x.Value)
由於 CompanyId 很長,並且您的 Linq 表達式的結果是 IEnumerable。 如果您確定只有一個結果,那么您可以使用:
CompanyId = keyValuePairs.Where(x => x.Key == e.Id).Select(x => x.Value).First()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.