Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C与Linq和Lambda连接/Where如何返回列表_C#_Lambda - Fatal编程技术网

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!就格式化而言,这看起来好多了!谢谢大家!这正是我需要的!