假设我有一个这样的数组:
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);