在IQueryable中存储多个linq查询的结果

时间:2017-02-07 22:05:20

标签: c# linq iqueryable

我想知道是否可以在一个IQueryable语句中存储多个linq查询的结果?

我有一个查询,我在foreach中使用:

//Where OnDemandHistory is the table
IOrderedQueryable<OnDemandHistory> A; 

foreach (int id in machineID)
{
    A = OnDemandHistory.Where(c => c.MachineID == id).OrderByDescending(c => c.ODHisDate);
    // I want to Order all results before writing to the table
    foreach(var entry in A)
    {         
      // I add to a table based on all entries found in A
    }
}

我正在尝试获取机器ID匹配的所有条目。没有。 MachineID的变化(基于用户)。

我想知道在我从查询中存储了所有结果之后但是在添加到表之前我是否可以执行OrderByDescending

我知道由于内部foreach循环它不会发生,但是当我尝试这样做时:

foreach (int id in machineID)
{
    A = OnDemandHistory.Where(c => c.MachineID == id).OrderByDescending(c => c.ODHisDate);
    // I want to Order all results before writing to the table       
}

foreach(var entry in A)
{         
    // I add to a table based on all entries found in A
}

我得到一个局部变量A未初始化的错误,

我将如何解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:3)

使用val myVar1 = calculateStuff("") // myVar1 is String val myVar2 = calculateStuff<String?>(null) // myVar2 is String? 语句可以更简单地完成:

Contains

答案 1 :(得分:1)

导致错误是因为第一个查询的最终结果只生成machineID的最后一个值的结果,这可能导致空结果或A的未初始化值,因此需要初始化A 。另外,我怀疑A可能是一个简单的列表。

您需要以下内容:

A = new List<OnDemandHistory>();
foreach (int id in machineID)
{
    A.AddRange(OnDemandHistory
     .Where(c => c.MachineID == id).OrderByDescending(c => c.ODHisDate).ToList());          
}
// order A here

然后运行第二个循环,检查A是否有行。但是,我怀疑在LINQ中有更聪明的方法将查询的machineID部分连接成一个LINQ语句。