【问题标题】:LINQ join to collection using indexLINQ 使用索引加入集合
【发布时间】:2013-03-07 19:28:55
【问题描述】:

我们有一个包含字符串的基本集合,我们想使用 LINQ 根据从数据库返回的 int 加入这个集合(在同一个 linq 语句中),但是该集合没有这样的“索引”,所以我们希望我们可以简单地引用集合的索引,即。项目在集合中的位置。

简单来说,在 linq 之外我们会这样做

string MyString = MyCollection[MyIndex];

但这在 LINQ 中不受支持。

任何帮助将不胜感激。

【问题讨论】:

  • 您使用的是哪个 Linq-provider?
  • 您的问题是要选择每个字符串中的每个第 n 个字符吗?

标签: c# linq


【解决方案1】:

要在 LINQ 查询中引用索引,您可以利用 Select()Where() 的以下重载

collection.Select((item, index) => new { item, index })
          .Select(p => /* now you can refer to p.item and p.index */);

collection.Where((item, index) => index == indexFromDb);

LINQ 还提供ElementAt()/ElementAtOrDefault() 方法,允许通过索引访问单个项目

【讨论】:

  • 这是在 c# 中的 edf linq 语句中。希望有一个“加入”类型的方法吗?!
  • 在此处查找 Linq 连接运算符:LINQ - Join Operators
  • 当我们尝试使用“ElementAt”时,我们会在运行时收到:- LINQ to Entities 无法识别方法 'System.String ElementAt[String](System.Collections.Generic.IEnumerable`1[ System.String], Int32)' 方法,并且该方法不能翻译成存储表达式。
  • 可能函数ElementAt() 无法转换为 SQL 查询,它仅适用于对象。
  • 没错,有人有其他想法吗?认为将一个实体表的整数值链接到本地​​集合会很简单!
【解决方案2】:

如果您的意思是您的 Linq 集合不可索引(可通过索引访问,例如 MyCollection[0]),您可以获取结果集合并调用 ToList()ToArray()。结果列表(或数组)确实有一个索引器。

【讨论】:

  • 我们使用的是 ObservableCollection,所以它确实有一个枚举器,但没有我们可以在 linq "join" 中引用的特定索引属性
  • 我已经在这里更好地解释了我的问题stackoverflow.com/questions/15273142/…
  • 好的,但是下次请更新您的原始问题,而不是创建一个新问题。
猜你喜欢
  • 1970-01-01
  • 2010-09-19
  • 2017-11-18
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多