【问题标题】:Linq Left Join with Lambda Count使用 Lambda 计数的 Linq 左连接
【发布时间】:2020-04-21 20:31:30
【问题描述】:

我有一个Users 和一个Shipments 表。 Shipments 表有一个属性Received。我想编写代码来获取所有Users 的所有货物都已通过 linq 收到 (received == true)。

Users

public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool NeedsFilament { get; set; }
public ICollection<Shipment> Shipments { get; set; }

Shipments

public Guid Id { get; set; }
public int Quantity { get; set; }
public DateTime DateShipped { get; set; }
public bool Recieved { get; set; }
public Guid UserId { get; set; } 
public User User { get; set; }

到目前为止,我在一个 SQL 查询中所做的事情没有计算 Shipments 中的 Received 属性,但只是得到了不同的(这是错误的)

SELECT DISTINCT
    [FirstName]
    ,[LastName]
    ,[Username]
    ,[Address]
    ,[LatestShippedDate]
    ,[PrinterActive]
    ,[ProductionDate]
    ,[ShippedQuantity]
    ,[Email]
    ,[PhoneNumber]
    ,[NeedsFilament]
    ,[FilamentTrackingNumber]
    ,[SentFilamentDate]
    ,[LatestShippedQuantity]
FROM 
    [dbo].[Users]
LEFT JOIN 
    Shipments ON Shipments.UserId = Users.Id
WHERE 
    Shipments.Recieved = 1 
    AND Users.NeedsFilament = 1

【问题讨论】:

标签: linq lambda count linq-to-sql


【解决方案1】:

你好@Pt4r 下面的 Linq 语句会做你想做的事,下面的行解析 users_table 并比较两个表的每个元素并保留那些语句返回 true 的元素

var newUserTbl = users_table.Where(user=>Shipments.UserId==user.id && Shipments.Recieved).ToList();

【讨论】:

  • 感谢您的回答。你从哪里得到的“货物”?是出货表吗?这个查询并没有真正连接两个表
  • 您创建了两个列表,一个包含所有 Users 对象,另一个包含所有 Shipments 对象(where 语句中的 Shipments 列表)。在用户列表中,在我的示例中为“users_table”,针对“发货”列表(针对列表中的每个对象)执行 where 语句。上述语句返回一个用户列表,其中包含已收到所有货物的所有用户。
  • @Pt4r 你也可以看看这个link也许会觉得有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-24
相关资源
最近更新 更多