我将在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中显示,当之无愧。
答案 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 };