Код: Выделить всё
public class House
{
public Guid Id { get; set; }
public virtual ICollection Flats { get; set; }
public HouseType Type { get; set; }
}
public class Flat
{
public Guid Id { get; set; }
public House House { get; set; }
}
public class HouseType
{
public Guid Id { get; set; }
public Guid IdMaterils { get; set; }
public virtual ICollection Houses { get; set; }
}
Например, таблицы содержат такие данные:
Дома:
Код: Выделить всё
Id |TypeId |
------------------------------------+------------------------------------+
dbec9670-46ef-47a0-8727-4a3c24a0f2ec|fdd1a587-9dc2-4c02-a375-39bdf3de775e|
e912d942-8d9c-4511-b0f8-6e3ac78bb8d2|fdd1a587-9dc2-4c02-a375-39bdf3de775e|
fd6f29ac-70aa-44ef-9257-c204a954f4ad|fdd1a587-9dc2-4c02-a375-39bdf3de775e|
Код: Выделить всё
Id |IdMaterils |
------------------------------------+------------------------------------+
fdd1a587-9dc2-4c02-a375-39bdf3de775e|85b7fb0e-4f8f-4d71-8c4b-d763ef5c767d|
0f99f64d-14bf-4732-b7cd-2e710889b20a|40744e83-b31a-4a62-81d0-9ad05f318aa2|
Код: Выделить всё
Id |HouseId |
------------------------------------+------------------------------------+
077fd0e3-af9d-468f-8209-3cb6bfc1cad1|dbec9670-46ef-47a0-8727-4a3c24a0f2ec|
0185c3d3-b18b-4616-a339-f1278c1ab46e|dbec9670-46ef-47a0-8727-4a3c24a0f2ec|
94c93b29-3bce-44b7-a97c-b490b47f78b7|e912d942-8d9c-4511-b0f8-6e3ac78bb8d2|
Код: Выделить всё
var result = await _bookingContext.Houses
.Include((x => x.Flats.Where(x => x.Id == new Guid("077fd0e3-af9d-468f-8209-3cb6bfc1cad1"))))
.Include(x => x.Type)
.Where(x => x.Type.IdMaterils == new Guid("85b7fb0e-4f8f-4d71-8c4b-d763ef5c767d"))
.Where(x => x.Flats.Any()).ToListAsync();
Код: Выделить всё
SELECT h."Id", h."TypeId", h0."Id", t."Id", t."HouseId", h0."IdMaterils"
FROM "Houses" AS h
INNER JOIN "HouseTypes" AS h0 ON h."TypeId" = h0."Id"
LEFT JOIN (
SELECT f0."Id", f0."HouseId"
FROM "Flats" AS f0
WHERE f0."Id" = '077fd0e3-af9d-468f-8209-3cb6bfc1cad1'
) AS t ON h."Id" = t."HouseId"
WHERE h0."IdMaterils" = '85b7fb0e-4f8f-4d71-8c4b-d763ef5c767d' AND EXISTS (
SELECT 1
FROM "Flats" AS f
WHERE h."Id" = f."HouseId")
ORDER BY h."Id", h0."Id"
Код: Выделить всё
houseid |flatid |
------------------------------------+------------------------------------+
dbec9670-46ef-47a0-8727-4a3c24a0f2ec|077fd0e3-af9d-468f-8209-3cb6bfc1cad1|
e912d942-8d9c-4511-b0f8-6e3ac78bb8d2| |
Код не исключает записи там, где они оставлены Результат соединения равен нулю.
Это условие "
Код: Выделить всё
Where(x => x.Flats.Any())Как это сделать?
Я ожидал, что результатом будут только дома, в которых есть хотя бы квартира с идентификатором = '077fd0e3-af9d-468f -8209-3cb6bfc1cad1' и дом типа с IdMaterials= '85b7fb0e-4f8f-4d71-8c4b-d763ef5c767d'
Подробнее здесь: https://stackoverflow.com/questions/792 ... linq-query
Мобильная версия