IEnumerable 数组在 Visual C# 中消失了

IEnumerable array disappeared in Visual C#

我声明了一个 IEnumerable 数组

IEnumerable<DataRow>[] drs=new IEnumerable<DataRow>[5];

并填充为

for(int i=0;i<5;i++)
{
    drs[i]=
        from x in dt.AsEnumerable()                 //dt is a DataTable
        where x["ID"].ToString() == i.ToString()    //Assuming dt has a column named ID
        select x;
}

当我离开for循环的范围时,我填充的数据都没有了。这是为什么?

Linq 表达式是延迟求值的。这意味着 C# 实际上并没有访问上面代码中的记录集。相反,它只是跟踪稍后将访问数据的表达式。

在收集 DataRows 的情况下,这可能会导致问题,因为 'later' 可能意味着在数据库连接(或至少结果集)关闭之后。

通过强制 Linq 当时计算可枚举数来解决这个问题,例如通过调用 ToList()。

for(int i=0;i<5;i++)
{
    drs[i]=
        (from x in dt.AsEnumerable()                 //dt is a DataTable
        where x["ID"].ToString() == i.ToString()    //Assuming dt has a column named ID
        select x).ToList();
}