C# 如何将Last()作为数据表中的IEnumerable返回

C# 如何将Last()作为数据表中的IEnumerable返回,c#,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:

如何从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());
无法从DataRow转换为IEnumerable


您可以将其放入一个数组中:

Set(new[]{ Data.AsEnumerable().Last() });
或者你可以用这个:

Set(Data.AsEnumerable().Reverse().Take(1));
或者这个:

Set(Data.AsEnumerable().Skip(Data.Rows.Count - 1));
这种非LINQ方法可能是最有效的方法,因为它避免了循环:

Set(new[]{ Data.Rows[Data.Rows.Count-1] });
为了实现它的价值,您还可以使用以下扩展:-

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

您可以将其放入一个数组中:

Set(new[]{ Data.AsEnumerable().Last() });
或者你可以用这个:

Set(Data.AsEnumerable().Reverse().Take(1));
或者这个:

Set(Data.AsEnumerable().Skip(Data.Rows.Count - 1));
这种非LINQ方法可能是最有效的方法,因为它避免了循环:

Set(new[]{ Data.Rows[Data.Rows.Count-1] });
为了实现它的价值,您还可以使用以下扩展:-

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

这些答案不会将所有记录都拉入内存,特别是Setnew[]{Data.AsEnumerable.Last}@JamieTaylor:不,这将使用单个DataRowDoes Setnew[]{Data.Rows[Data.Rows.Count-1]}创建一个数组;给一个电子计算器。i、 e.我可以从集合中影响数据中的值吗?@ManInMoon:它不是延迟执行的,它是一个包含单个项的数组。但是如果修改DataRow,您将修改DataTable,因为DataRow是引用类型。不过,你的意思还不太清楚。您还可以通过..AsEnumerable.Last从集合中访问数据表本身,它确实会占用所有行,然后只返回最后一行。如果您尝试just.Last,它可能会更好。这些答案不会将所有记录都拉入内存,尤其是Setnew[]{Data.aseneumerable.Last}@JamieTaylor:不,这将使用单个DataRowDoes Setnew[]{Data.Rows[Data.Rows.Count-1]}创建一个数组;给一个电子计算器。i、 e.我可以从集合中影响数据中的值吗?@ManInMoon:它不是延迟执行的,它是一个包含单个项的数组。但是如果修改DataRow,您将修改DataTable,因为DataRow是引用类型。不过,你的意思还不太清楚。您还可以通过..AsEnumerable.Last从集合中访问数据表本身,它确实会占用所有行,然后只返回最后一行。如果你能坚持下去,也许效果会更好。