使用自定义对象获取LINQ查询的行索引

时间:2014-03-25 12:03:27

标签: c# linq

我有以下LINQ查询来接收索引:

fieldIndexes = this.record.Fields.Where(a => !a.IsCodeField)
                                 .OrderBy(a => a.DatabaseIndex)
                                 .Select(a => a.DatabaseIndex - 1)
                                 .ToArray();

但我想将a.DatabaseIndex替换为搜索的实际索引。我知道语法.Select((a, index) => new (index, a))...,但我不确定如何将此a转换为我的类型,在本例中为Field。我试过了:

fieldIndexes = this.record.Fields.Select((a, index) => new {index, a})
                                 .Where(a => !a.IsCodeField) // <- Invalid Cast. 
                                 .OrderBy(a => a.DatabaseIndex)
                                 .Select(a => a.DatabaseIndex - 1)
                                 .ToArray();

如何在LINQ语句中将a转换为我的类型?

感谢您的时间。

2 个答案:

答案 0 :(得分:5)

Where子句中,您正在处理新创建的具有属性aindex的匿名对象,您可以使用它们:

.Where(a => !a.a.IsCodeField)

当然,这可以通过更易读的方式来完成:

fieldIndexes = this.record.Fields.Select((a, index) => new {Index = index, Field = a})
                                 .Where(a => !a.Field.IsCodeField)
                                 ...

答案 1 :(得分:3)

您正在将序列项投影到具有属性indexa的匿名对象。原始项目可通过财产a访问:

fieldIndexes = this.record.Fields.Select((a, index) => new {index, a})
                                 .Where(x => !x.a.IsCodeField)