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

Man*_*oon 1 c#

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

我想要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());
Run Code Online (Sandbox Code Playgroud)

无法转换DataRowIEnumerable<DataRow>

Tim*_*ter 9

你可以把它放在一个数组中:

Set(new[]{ Data.AsEnumerable().Last() });
Run Code Online (Sandbox Code Playgroud)

或者你可以用这个:

Set(Data.AsEnumerable().Reverse().Take(1));
Run Code Online (Sandbox Code Playgroud)

或这个:

Set(Data.AsEnumerable().Skip(Data.Rows.Count - 1));
Run Code Online (Sandbox Code Playgroud)

这种非LINQ方法可能是最有效的方法,因为它避免了循环:

Set(new[]{ Data.Rows[Data.Rows.Count-1] });
Run Code Online (Sandbox Code Playgroud)

对于它的价值,你也可以使用以下扩展;-)

public static IEnumerable<T> AsSequence<T>(this T obj)
{
    yield return obj;
}  
Run Code Online (Sandbox Code Playgroud)

...

Set(Data.AsEnumerable().Last().AsSequence());
Run Code Online (Sandbox Code Playgroud)