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

C# 在IQueryable中存储多个linq查询的结果,c#,linq,iqueryable,C#,Linq,Iqueryable,我想知道是否可以将多个linq查询的结果存储在一个IQueryable语句中 我在foreach中使用了一个查询: //Where OnDemandHistory is the table IOrderedQueryable<OnDemandHistory> A; foreach (int id in machineID) { A = OnDemandHistory.Where(c => c.MachineID == id).OrderByDescending(c

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

我在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
    }
}
我得到一个局部变量一个未初始化的错误

我该如何着手解决这个问题


提前感谢

导致此错误的原因是,由于第一次查询的最终结果仅生成
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=新列表();
foreach(machineID中的int id)
{
A.AddRange(OnDemandHistory)
.Where(c=>c.MachineID==id).OrderByDescending(c=>c.ODHisDate.ToList());
}
//在这里点餐

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

导致错误的原因是,由于第一个查询的最终结果只生成
machineID
的最后一个值的结果,这可能导致空结果或未初始化的,因此,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=新列表();
foreach(machineID中的int id)
{
A.AddRange(OnDemandHistory)
.Where(c=>c.MachineID==id).OrderByDescending(c=>c.ODHisDate.ToList());
}
//在这里点餐

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

使用
包含
语句可以使操作简单得多:

var result = OnDemandHistory.Where(c => machineID.Contains(c.MachineID))
                            .OrderByDescending(c => c.ODHisDate);

通过使用
Contains
语句,您可以实现更简单的操作:

var result = OnDemandHistory.Where(c => machineID.Contains(c.MachineID))
                            .OrderByDescending(c => c.ODHisDate);

我之前尝试过这个方法,我得到了一个转换错误“无法从int?转换为int”,然后,根据
OnDemandHistory
的实际情况,您可以使用
c.MachineID.GetValueOrDefault()
c.MachineID.Value
,假设
MachineID
不包含0。我之前尝试过这个方法,我遇到一个转换错误“无法从int?转换为int”,然后,根据OnDemandHistory的实际情况,您可以使用
c.MachineID.GetValueOrDefault()
c.MachineID.Value
,假设
MachineID
不包含0。我尝试了您的代码,它仍然会产生与我相同的结果,我添加了
A.OrderByDescending(c=>c.ODHisDate)
和仍然无效在启动第二个循环之前,您是否尝试过调试代码并使用断点检查的内容。一些示例数据加上
OnDemandHistory
的定义会有所帮助。您的评论给了我一个想法,帮助我解决了问题。我查看了
OnDemandHistory
表本身并运行了一个类似的查询,我按另一个字段而不是MachineID排序,感谢您的帮助,我尝试了您的代码,它仍然产生与我相同的结果,我添加了
a.OrderByDescending(c=>c.ODHisDate)
和仍然无效在启动第二个循环之前,您是否尝试过调试代码并使用断点检查的内容。一些示例数据加上
OnDemandHistory
的定义会有所帮助。您的评论给了我一个想法,帮助我解决了问题。我查看了
OnDemandHistory
表本身并运行了类似的查询,我按另一个字段而不是MachineID排序,感谢您的帮助,