所以相當于這個查詢:
select * from car
left join parts ON car.Id = parts.carId
where parts.MemberId = 1
這是在 EntityFrameworkCore LINQ 中,使用已經選擇的 IQueryable car.Include(x => x.parts):
queryable = queryable.Where(x =>
x.parts.Select(y => y.MemberId).Contains(1);
但是如何將以下 SQL 轉換為 LINQ,以便它包含左car表中在表中沒有相應MemberId條目的行parts?
select * from car
left join parts ON car.Id = parts.CarId and parts.MemberId = 1
楷模:
public class Car
{
public int Id { get; set; }
public virtual ICollection<Part> Parts { get; set; }
}
public class Parts
{
public int Id { get; set; }
public int CarId { get; set; }
public virtual Car { get; set; }
public int MemberId { get; set; }
}
uj5u.com熱心網友回復:
過濾Include器完全符合您的要求:
var cars = context.Cars
.Include(c => c.Parts.Where(p => p.MemberId == 1));
這不會生成具有復合條件的更短的連接陳述句,而是生成對過濾子查詢的外部連接Parts,以達到相同的效果。
uj5u.com熱心網友回復:
試試這樣:
queryable = queryable.Include(x => x.parts).Where(x =>
x.parts.Any(y => y.MemberId == 1).ToList();
uj5u.com熱心網友回復:
queryable = queryable
.Where(x => x.parts.Select(y => y.MemberId).Contains(1) || !x.parts.Any());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497414.html
標籤:C# 林克 ef-core-2.1
下一篇:Linq將列組合分組為兩個串列
