如何在LINQ中的其他查询中以参数化方式使用查询结果

本文关键字:查询 参数 方式使 结果 其他 LINQ | 更新日期: 2023-09-27 18:20:11

我将使用LINQ中查询的输出作为其他。。。以下是数据库处理程序的定义:

DataClassDataContext DB = new DataClassDataContext();

下面是查询的连续性及其结果的利用率。

var axleIDQuery = (from Axles in DB.Axles
    where Axles.Name == axleComboBox.Text
    select Axles.AxleID).singleOrDefault();
var checkpointIDQuery = from Checkpoints in DB.Checkpoints
                    where Checkpoints.AxleID == AxleIDQuery
                    select new{ Checkpoints.checkpointID };
var AVLQuery = from AVLs in DB.AVLs
                    where AVLs.checkpointID == checkpointIDQuery.toString();
                    select new{ 
                                AVL.Vehicle,
                                AVL.MCT,
                                AVL.CheckpointID
                              };

剩下的就是尝试呈现结果:

DataGridView1.DataSource = AVLQuery.toLost();

问题是数据网格视图中不会显示任何内容。有人能告诉我错误的部分吗?!

PS。调试显示问题出在第三个查询上。因为中间一个的结果可以显示在datagridview中,这是理所当然的。

如何在LINQ中的其他查询中以参数化方式使用查询结果

checkpointIDQuery是一个查询结果,当求值时它将是集合,但您只需为它执行ToString
所以当哪里检查条件总是错误的

为了快速解决问题,您可以使用联接子句像这样更改查询

var AVLQuery = from AVLs in DB.AVLs
               join cId in checkpointIDQuery on  AVLs.checkpointID equals cId.checkpointID 
               select new{ 
                          AVL.Vehicle,
                          AVL.MCT,
                          AVL.CheckpointID
                         };

更新:如果你想删除singleOrDefault,那么你需要像这个一样更改你的查询

var axleIDQuery = from Axles in DB.Axles
                  where Axles.Name == axleComboBox.Text
                  select Axles.AxleID;
var checkpointIDQuery = from Checkpoints in DB.Checkpoints
                        join axelId in axleIDQuery on Checkpoints.AxleID equals axelId 
                        select new{ Checkpoints.checkpointID };