c# - 如何进行嵌套列表操作?

标签 c# linq list

我正在尝试调用嵌套列表操作。我有两个不同的列表,但 Name 是它们的公共(public)变量。我有两个列表,这是我正在尝试的:

  1. 选择图片

    public int Id { get; set; }
    public int X { get; set; }
    public int Y { get; set; }
    public string Name { get; set; }
    
  2. 生成的眼距

    public string Name { get; set; }
    public double eyeDistance { get; set; }
    

我想调用 generetedEyeDistance 的 eyeDistance 值,但名称应该相同。我试过了:

var asdasf = generatedEyeDistance.Where(f=> (f.Name) == (selectedImage.Select(name => name.Name))).ToList();

但这会产生以下错误:

Operator '==' cannot be applied to operands of type 'string' and 'System.Collections.Generic.IEnumerable<string>'

而且我的方法看起来也不对。谁能帮我解决这个问题?

最佳答案

如果你想获取所选图像的生成距离,则在名称上加入两个集合:

from d in generatedEyeDistance
join i in selectedImage
    on d.Name equals i.Name
select d

Lambda 语法(我不喜欢它与连接,但是..)

generatedEyeDistance.Join(selectedImage, d => d.Name, i => i.Name, (d,i) => d)

顺便说一句,你有问题,因为 selectedImage.Select(name => name.Name) 返回名称序列,而你正试图将序列与名称的距离进行比较。实际上你应该检查是否存在与距离名称同名的图像:

generatedEyeDistance.Where(d => selectedImage.Any(i => i.Name == d.Name))

但是 join 的效率要高得多,因为它使用集合而不是对每个距离进行子查询。

更新:还有一个选项,如果您有距离列表,并且不想使用查询语法 - 那么您可以手动创建名称集并过滤距离列表:

var names = new HashSet<string>(selectedImage.Select(i => i.Name));
var result = generatedEyeDistance.FindAll(d => names.Contains(d.Name));

关于c# - 如何进行嵌套列表操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22068408/

相关文章:

c# - 以 zip 格式下载文件会导致 ASP.NET MVC 中的压缩文件损坏

c# - 最佳异步 while 方法

c# - Linq vs Lambda-Expressions 查询执行和执行查询中的 "1 AS [C1]"meening

c# - 列值不能重复

java - 如何旋转列表,以便从列表中选择的项目始终位于 ListView 中的中间位置

c# - 如何从 C# 查找 Windows 通用应用程序窗口

c# - 是装箱还是拆箱?

c# - 非重复计数 x 和按日期 y 分组

python - 如何生成没有 “moving” 零的列表的排列。在 Python 中

php - 选择状态mysql数组