Fluent LINQ EF Core - Select 过滤子 属性
Fluent LINQ EF Core - Select filtered child property
我有以下 classes:
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class ParentEntity
{
public Guid Id { get; set; }
public string SomeProperty { get; set; }
public ICollection<ChildEntity> ChildEntities { get; set; }
}
public class ChildEntity
{
public Guid Id { get; set; }
public int Vote { get; set; }
public Guid UserId { get; set; }
}
public class ReturnedParentDto
{
public Guid Id { get; set; }
public string SomeProperty { get; set; }
public int Vote { get; set; }
}
我希望能够returnParenEntities 的完整列表,但获取用户的 Id class (UserClassId),然后过滤 ParentEntity 的 ICollection,其中 UserUid = UserClassId,因此仅1 ChildEntity 总是 returned。然后我想从 returned ChildEntity 中提取一个特定字段并将其与 ParentEntity 字段合并。最终结果应该类似于 ReturnedParentDto.
我想做成
这样的风格
ParentEntities.Include(v => v.ChildEntities).ToList()
这在 EF Core 5 中似乎是可能的,但我的项目是在 3.1 中。
您可以按如下方式进行
方法一:
var result = result = parentEntities.Include(x => x.ChildEntities.Where(y => y.UserId == userId))
.Select(x => new ReturnedParentDto {
Id = x.Id,
SomeProperty = x.SomeProperty,
Vote = x.ChildEntities.FirstOrDefault()?.Vote // userId is the variable here
});
方法二:
var result = parentEntities.Select(x =>
new ReturnedParentDto {
Id = x.Id,
SomeProperty = x.SomeProperty,
Vote = x.ChildEntities.FirstOrDefault(y => y.UserId == userId)?.Vote // userId is the variable here
});
我有以下 classes:
public class User
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class ParentEntity
{
public Guid Id { get; set; }
public string SomeProperty { get; set; }
public ICollection<ChildEntity> ChildEntities { get; set; }
}
public class ChildEntity
{
public Guid Id { get; set; }
public int Vote { get; set; }
public Guid UserId { get; set; }
}
public class ReturnedParentDto
{
public Guid Id { get; set; }
public string SomeProperty { get; set; }
public int Vote { get; set; }
}
我希望能够returnParenEntities 的完整列表,但获取用户的 Id class (UserClassId),然后过滤 ParentEntity 的 ICollection,其中 UserUid = UserClassId,因此仅1 ChildEntity 总是 returned。然后我想从 returned ChildEntity 中提取一个特定字段并将其与 ParentEntity 字段合并。最终结果应该类似于 ReturnedParentDto.
我想做成
这样的风格ParentEntities.Include(v => v.ChildEntities).ToList()
这在 EF Core 5 中似乎是可能的,但我的项目是在 3.1 中。
您可以按如下方式进行
方法一:
var result = result = parentEntities.Include(x => x.ChildEntities.Where(y => y.UserId == userId))
.Select(x => new ReturnedParentDto {
Id = x.Id,
SomeProperty = x.SomeProperty,
Vote = x.ChildEntities.FirstOrDefault()?.Vote // userId is the variable here
});
方法二:
var result = parentEntities.Select(x =>
new ReturnedParentDto {
Id = x.Id,
SomeProperty = x.SomeProperty,
Vote = x.ChildEntities.FirstOrDefault(y => y.UserId == userId)?.Vote // userId is the variable here
});