C# C与Linq和Lambda连接/Where如何返回列表
下面的查询工作正常,返回一个与预期完全相同的列表C# C与Linq和Lambda连接/Where如何返回列表,c#,lambda,C#,Lambda,下面的查询工作正常,返回一个与预期完全相同的列表 List<purchaseOrderHeaderEntity> details = (from p in db.purchaseOrderDetailEntity join r in db.purchaseOrderHeaderEntity on p.purchaseOrderID equals r.purchaseOrderID where p.productID == productID select r).ToList
List<purchaseOrderHeaderEntity> details = (from p in
db.purchaseOrderDetailEntity join r in db.purchaseOrderHeaderEntity on
p.purchaseOrderID equals
r.purchaseOrderID
where p.productID == productID select r).ToList();
如果我使用lambda重写它,它将返回两个列表:
List<purchaseOrderHeaderEntity> lambda_details = db.purchaseOrderDetailEntity.Join(db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => new { Detail = p, Header = r }).Where(DetailAndHeader => DetailAndHeader.Detail.productID == productID).ToList();
如果我从选择部分删除Detail=p,Join将抛出一个错误
方法的类型参数。。。无法从用法推断。
尝试显式指定类型参数
有没有办法重写该查询,使其只返回一个列表作为标题
提前多谢 您可以在join之前放置where条件,然后返回r
var lambda_details = db.purchaseOrderDetailEntity
.Where(detailAndHeader => detailAndHeader.Detail.productID == productID)
.Join(db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => r).ToList();
您可以在join之前放置where条件,然后返回r
var lambda_details = db.purchaseOrderDetailEntity
.Where(detailAndHeader => detailAndHeader.Detail.productID == productID)
.Join(db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => r).ToList();
您的查询理解和流利的查询是不同的查询 您的查询理解表达式为:
from p in db.purchaseOrderDetailEntity
join r in db.purchaseOrderHeaderEntity on
p.purchaseOrderID equals r.purchaseOrderID
where p.productID == productID
select r
你的表格是:
db.purchaseOrderDetailEntity.
Join(
db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => new { p, r }).
Where(pr => pr.p.productID == productID)
但正确的流畅形式是
db.purchaseOrderDetailEntity.
Join(
db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => new { p, r }).
Where(pr => pr.p.productID == productID).
Select(pr => pr.r)
这回答了你的问题吗?如果没有,请给出一个我们可以编译和运行的小程序,它清楚地再现了问题。您的查询理解和流畅的查询是不同的查询 您的查询理解表达式为:
from p in db.purchaseOrderDetailEntity
join r in db.purchaseOrderHeaderEntity on
p.purchaseOrderID equals r.purchaseOrderID
where p.productID == productID
select r
你的表格是:
db.purchaseOrderDetailEntity.
Join(
db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => new { p, r }).
Where(pr => pr.p.productID == productID)
但正确的流畅形式是
db.purchaseOrderDetailEntity.
Join(
db.purchaseOrderHeaderEntity,
p => p.purchaseOrderID,
r => r.purchaseOrderID,
(p, r) => new { p, r }).
Where(pr => pr.p.productID == productID).
Select(pr => pr.r)
这回答了你的问题吗?如果没有,请提供一个我们可以编译和运行的小程序,它清楚地再现了问题。谢谢,haim770!就格式化而言,这看起来好多了!谢谢大家!这正是我需要的!谢谢,haim770!就格式化而言,这看起来好多了!谢谢大家!这正是我需要的!