![](/img/trans.png)
[英]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.