简体   繁体   English

如何从DataTable中将Last()作为IEnumerable返回

[英]How do I return Last() as an IEnumerable from a DataTable

How do I return Last() as an IEnumerable from a DataTable? 如何从DataTable中将Last()作为IEnumerable返回?

I want IEnumerable because I may pass in a larger subset of rows. 我想要IEnumerable,因为我可能会传递更大的行子集。

public static void Set(IEnumerable<DataRow> rowsToProcess)
{
    //Do something with rowsToProcess;
}

DataTable data;

//This works:
Set(Data.AsEnumerable());

//This gives an error:
Set(Data.AsEnumerable().Last());

Cannot convert from DataRow to IEnumerable<DataRow> 无法从DataRow转换为IEnumerable<DataRow>

You could put it in an array: 您可以将其放在数组中:

Set(new[]{ Data.AsEnumerable().Last() });

or you could use this: 或者您可以使用以下方法:

Set(Data.AsEnumerable().Reverse().Take(1));

or this: 或这个:

Set(Data.AsEnumerable().Skip(Data.Rows.Count - 1));

this non-LINQ approach is probably the most efficient way, because it avoids a loop: 这种非LINQ的方法可能是最有效的方法,因为它避免了循环:

Set(new[]{ Data.Rows[Data.Rows.Count-1] });

For what it's worth, you could also use following extension ;-) 对于它的价值,您还可以使用以下扩展名;-)

public static IEnumerable<T> AsSequence<T>(this T obj)
{
    yield return obj;
}  

... ...

Set(Data.AsEnumerable().Last().AsSequence());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM