这篇文章中的查询有什么区别: Save LINQ Query As Variable To Call Another LINQ Query
var parentLoc = (from a in db.PartsLocations
where a.LocationName == aContainer
select a.ParentLocation);
var locations = (from b in db.PartsLocations
where b.LocationID == parentLoc
select b).ToList();
来自this帖子的以下示例。
Dim persVogel = From p In db.People
Where p.LastName = "Vogel"
Select p
Dim persVogelPHVIS = From pp In persVogel
Where pp.Company.Name = "PHVIS"
Select pp
这两个都声明了2个查询,并将第一个查询变量用于第二个查询。 在第一个例子中使用Single()但是在visualstudiomagazine.com文章中没有使用的原因是什么?感谢
答案 0 :(得分:0)
这两个样本根本不同。
第一个样本
我认为你错误地粘贴了这个......从引用的问题来看,查询应该是:
var parentLoc = (from a in db.PartsLocations
where a.LocationName == aContainer
select a.ParentLocation).Single();
var locations = (from b in db.PartsLocations
where b.LocationID == parentLoc
select b).ToList();
(我假设LocationID
和ParentLocation
被输入为int
。)
在此示例中,parentLoc
是int
- 从ParentLocation
表获取的PartsLocations
值的单个实例。所以你得到的是int
。
第二个linq语句也从PartsLocations
表中获取其记录。它使用parentLoc
来标识该表中的记录(例如where b.LocationID == parentLoc
)。最后得到的是一组PartsLocations
条记录。
进行.Single()
调用是因为您希望将结果与第二个语句中的LocationID
进行比较,并且无法将int
与IEnumerable<int>
进行比较。
第二个样本
Dim persVogel = From p In db.People
Where p.LastName = "Vogel"
Select p
Dim persVogelPHVIS = From pp In persVogel
Where pp.Company.Name = "PHVIS"
Select pp
在第二个示例中,persVogel
是来自People
表的记录的子集(具体地,是具有LastName == "Vogel"
的人的子集) - 所以你得到的是一组{ {1}}记录。
第二个linq语句基于此记录子集(People
),并进一步将其过滤到From pp In persVogel
所在的记录。你得到的仍然是一组pp.Company.Name = "PHVIS"
条记录。
这两个语句很容易压缩成一个语句:
People
最后,您仍会获得一组Dim persVogelPHVIS = From p In db.People
Where p.LastName = "Vogel"
AndAlso p.Company.Name = "PHVIS"
Select p
条记录。