У меня есть две таблицы, объединенные 1-n способом.
Первая таблица - Пользователи :
Вторая таблица - Согласие :
В SQL Сервер я использую этот запрос
SELECT *
FROM Users
Inner Join (
Select Consent.IDUser, Consent.Type, Consent.Date, Consent.Consent
From Consent
Inner Join (
Select IDUser, Type, Max(Date) as MaxDate
From Consent
Group By IDUser, Type
) As ConsentGrouped on Consent.IDUser = ConsentGrouped.IDUser and Consent.Type = ConsentGrouped.Type and Consent.Date = ConsentGrouped.MaxDate
) as AllData
On Users.id = AllData.IDUser
для достижения этой цели
В моем. NET проекте я использую платформу сущностей, поэтому у меня есть две сущности:
public partial class Users
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Users()
{
this.Consent = new HashSet<Consent>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Consent> Consent{ get; set; }
}
public partial class Consent
{
public int Id { get; set; }
public Nullable<int> IDUser { get; set; }
public string Type { get; set; }
public string Origin { get; set; }
public Nullable<System.DateTime> Date { get; set; }
public Nullable<bool> Consent { get; set; }
public virtual Users Users { get; set; }
}
Как я могу получить тот же результат запроса через Entity Framework? Так что только самое последнее согласие по типу для каждого пользователя.
Я использую эту лямбду, чтобы получить пользователя, как я могу изменить ее, чтобы получить желаемый результат?
var user = await db.Users
.Include(ut => ut.Consent)
.Where(ut => ut.Id == userID)
.FirstOrDefaultAsync();
Спасибо!