c# - LINQ:从传入的 IEnumerable 获取具有匹配字符串属性的所有对象以高效的方式
问题描述
刚刚看到这段代码,问自己如何改进以减少查询量。尝试了一些 LINQ 语句,但找不到答案。
public static Dictionary<string, Computer> GetComputer(IEnumerable<string> workStations)
{
var dict = new Dictionary<string, Computer>();
using (var db = new ComputerContext())
{
foreach (var workStation in workStations)
{
var t = db.Computers.FirstOrDefault(o => o.Id.Equals(workStation));
if (!dict.ContainsKey(workStation))
{
dict.Add(workStation, t);
}
}
return dict;
}
}
当尝试这样的事情时:
var computers = db.Computers.Where(x => workStations.Select(y => y).Equals(x.Id)).ToList();
foreach (var computer in computers)
{
if (!dict.ContainsKey(computer.Id))
{
dict.Add(computer.Id, computer);
}
}
Intellisense 告诉我“可疑的比较:解决方案中没有类型是从两者继承的
'System.Collections.Generic.IEnumerable' 和 'string'”导致异常“无法比较 'System.Collections.Generic.IEnumerable`1[[System.String, mscorlib, Version=4.0.0.0, Culture =中性,PublicKeyToken=b77a5c561934e089]]'。仅支持原始类型、枚举类型和实体类型。”
解决方案
问题出在您的查询中。试试这个代码:
var computers = db.Computers.Where(x => workStations.Any(y => y.Equals(x.Id)).ToList();
foreach (var computer in computers)
{
if (!dict.ContainsKey(computer.Id))
{
dict.Add(computer.Id, computer);
}
}
推荐阅读
- r - 什么是 R 中 textstat_collocations() 中的 lambda 和 z
- javascript - Javascript:上传大型视频
- java - 有没有更简单的方法来声明一个集合,就像在 Javascript 中所做的那样
- sql - 在 WHERE 语句中使用多个条件更新表中的单个列
- android - 需要初学者帮助 - BottomNavBar
- barcode - 如何使用 Zebra GC420t 打印机的 EPL 命令打印 QR 码
- javascript - 将鼠标悬停在另一个子容器上时,使用 javascript 容器闪烁并同时删除和添加 CSS 类
- angular - Typescript 对象数组未按预期存储
- c++ - 如何使中间小部件居中并展开其单元格
- sql - 按相同名称和 6 位到 7 位值排序,然后从低到高