Linq Left Соединяется с Lambda Count - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть таблица Users и Shipments. Таблица Shipments имеет свойство Received. Я хочу написать код, чтобы получить все Users, где были получены все их отправления (received == true) с linq.

Users table

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 table

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, который не учитывает Received реквизитов в Shipments, а просто получает отличные (это неправильно)

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

1 Ответ

0 голосов
/ 24 апреля 2020

Hello @ Pt4r приведенный ниже оператор Linq сделает то, что вы хотите, строка ниже анализирует users_table и сравнивает каждый элемент двух таблиц и сохраняет те элементы, оператор которых возвращает true

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