如何将索引字段添加到Linq结果中



假设我有一个这样的数组:

string [] Filelist = ...

我想创建一个Linq结果,其中每个条目在数组中的位置如下:

var list = from f in Filelist
    select new { Index = (something), Filename = f};

第一项索引为0,第二项索引为1,等等

表达式Index=应该使用什么?

不要使用查询表达式。使用Select的过载,它会给您传递一个索引:

var list = FileList.Select((file, index) => new { Index=index, Filename=file });
string[] values = { "a", "b", "c" };
int i = 0;
var t = (from v in values
select new { Index = i++, Value = v}).ToList();

无法使用纯LINQ查询表达式(带有from.. where.. select..子句的查询表达式)来获取索引

但是,这并不意味着您必须完全放弃这种LINQ查询样式。

您只需要退出LINQ查询表达式并使用.Select(item, index)方法重载。

var newestExistingFilesWithIndexes = 
    (from f in Filelist
     // we love LINQ query expressions
     where f.Exists
     // and we use it anywhere possible
     orderby f.LastModified descending
     select f)
     // but sometimes we have to get out and use LINQ extension methods
    .Select((f, index) => new { Index = index, Filename = f.Fullname});

或者假设,您需要根据项目索引筛选列表。。。

var newestExistingFilesOnlyEvenIndexes = 
     // use the Select method overload to get the index
    (from f in Filelist.Select((file, index) => new { file, index })
     // only take item with an even index
     where f.index % 2 == 0
     where f.file.Exists
     orderby f.file.LastModified descending
     select f.file);

相关内容

  • 没有找到相关文章

最新更新