Соедините несколько таблиц и верните последнюю запись из таблицы 2 - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть несколько таблиц table1, table2, table3 и table4.Все эти таблицы имеют отношение MyID.Table2 может иметь одну или несколько записей, но меня интересует только последняя вставленная запись.

Я написал следующий запрос, чтобы получить желаемый результат, однако table2 по-прежнему возвращает более однойзапись.

var query = (from t1 in table1
            join t2 in table2
                on t1.MyID equals t2.MyID
                into t2Table
            join t3 in table3
                on t1.MyID equals t3.MyID 
                into t3Table
            join t4 in table4
                on t1.MyID equals t4.MyID 
                into t4Table
            where t1.MyID == 1
            select new MyViewModel()
            {
                A = t1.A,
                B = t1.B,
                C = t1.C,
                D = t2Table
                    .OrderByDescending(x => x.MyDate)
                    .Select(x => x.D).First(),
                E = t2Table
                    .OrderByDescending(x => x.MyDate)
                    .Select(x => x.E).First(),
                F = t2Table
                    .OrderByDescending(x => x.MyDate)
                    .Select(x => x.F).First(),
                G = t3Table.Select(c => new TModel()
                {
                    Col1 = c.Col1,
                    Col1 = c.Col2,
                }).ToList(),
                H = t4Table.Select(l => new PModel()
                {
                    Col1 = l.Col1,
                    Col2 = l.Languages.Col2,
                }).ToList(),
            });

Для D, E, F я также попытался выбрать .Max(), но результат все тот же.Как я могу получить последнюю запись из table2, используя join?

1 Ответ

0 голосов
/ 29 ноября 2018

Не используйте явные объединения.Перепишите запрос следующим образом:

var query = table1
        .Where(t1 => t1.MyID == 1)
        .Select(t1 => new MyViewModel()
        {
            A = t1.A,
            B = t1.B,
            C = t1.C,
            D = table2.Where(t2 => t2.MyID == t1.MyID).OrderByDescending(x => x.MyDate).Select(x => x.D).FirstOrDefault(),
            E = table2.Where(t2 => t2.MyID == t1.MyID).OrderByDescending(x => x.MyDate).Select(x => x.E).FirstOrDefault(),
            F = table2.Where(t2 => t2.MyID == t1.MyID).OrderByDescending(x => x.MyDate).Select(x => x.F).FirstOrDefault(),
            G = table3.Where(t3 => t3.MyID == t1.MyID).Select(c => new TModel()
            {
                Col1 = c.Col1,
                Col2 = c.Col2,
            }).ToList(),
            H = table4.Where(t4 => t4.MyID == t1.MyID).Select(l => new PModel()
            {
                Col1 = l.Col1,
                Col2 = l.Languages.Col2,
            }).ToList(),
        });

На данный момент мы не будем учитывать возможные оптимизации производительности.Это должно иметь желаемый результат.Также обратите внимание, что я исправил назначение для свойства G (у вас там было назначено Col1 дважды. Я также переключился с использования First() на FirstOrDefault(), так как это должно быть более безопасно и надежно (хотя я не уверенкак MySql будет отличаться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...