Как ограничить левое внешнее соединение LINQ одной строкой

Вам нужно сгруппировать таблицу. Лучший joins способ сделать это:

    var query = from i in db.items
                join p in (from p in db.photos
                           group p by p.item_id into gp
                           where gp.Count() > 0
                           select new { item_id = g.Key, Photo = g.First() })
            on i.id equals p.item_id into tempPhoto
            from tp in tempPhoto.DefaultIfEmpty()
            orderby i.date descending 
            select new
            {
                itemName = i.name,
                itemID = i.id,
                id = i.id,
                photoID = tp.Photo.PhotoID.ToString()
            };

Изменить: это jointable Эми Б. Я делаю это только join потому, что Ник попросил linq-query-syntax меня. Ник, пожалуйста, измените asp.net или удалите этот раздел по joins своему усмотрению.

Сгенерированный dbms SQL-запрос довольно большой. Целое language-integrated-query значение 0 (для сравнения csharp со счетчиком) передается databases через параметр.

SELECT [t0].X AS [id], CONVERT(NVarChar(MAX),(
    SELECT [t6].Y
    FROM (
        SELECT TOP (1) [t5].Y
        FROM [dbo].[Photos] AS [t5]
        WHERE (([t4].Y IS NULL) AND ([t5].Y IS NULL)) OR (([t4].Y IS NOT NULL) AND ([t5].Y IS NOT NULL) AND ([t4].Y = [t5].Y))
        ) AS [t6]
    )) AS [PhotoId]
FROM [dbo].[Items] AS [t0]
CROSS APPLY ((
        SELECT NULL AS [EMPTY]
        ) AS [t1]
    OUTER APPLY (
        SELECT [t3].Y
        FROM (
            SELECT COUNT(*) AS [value], [t2].Y
            FROM [dbo].[Photos] AS [t2]
            GROUP BY [t2].Y
            ) AS [t3]
        WHERE (([t0].X) = [t3].Y) AND ([t3].[value] > @p0)
        ) AS [t4])
ORDER BY [t0].Z DESC

План выполнения db показывает три левых соединения. По db крайней мере, один тривиален joins и не должен считаться (он asp-net приносит ноль). Здесь достаточно asp-net сложности, поэтому я не могу csharp четко указать на какие-либо linq-query-syntax проблемы с эффективностью. Это joins могло бы работать отлично.

c#

asp.net

database

linq

join

2022-09-14T01:10:20+00:00