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

时间:2014-09-01 16:31:05

标签: c# linq linq-to-sql

我将在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();

问题是datagridview中不会显示任何内容。 有人可以告诉我有关错误的部分吗?!

PS。调试显示问题在于第三个查询。因为中间的结果可以在datagridview中显示,当之无愧。

1 个答案:

答案 0 :(得分:2)

checkpointIDQuery是一个查询结果,在评估时会收集,但您只需ToString即可。 所以当检查条件总是假的时候

要快速解决问题,您可以使用join clause

更改此类查询
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 };