Member 13768545 Ответов: 1

Как вы можете использовать lastordefault или firstordefault в этом запросе


var Grdquery = from db in db.V_Salaries.Where(i => i.InOut_Flag == 0 && i.Year == cariyil).OrderByDescending(i => i.Id)
                           orderby db.Worker_Name, db.Year_Name

                           select new
                           {
                               db.Id,
                               db.Year,
                               db.Worker_Code,
                               db.Worker_Name,
                               db.Position_Name,
                               db.Year_Name,
                               db.Receipt_Date,
                               db.SgkSalary,
                               db.SgkAgi,
                               db.Salary,
                               db.Overtimes_Salary,
                               db.Food_Price,
                               db.Road_Price,
                               db.Currency,
                               db.Worker_Position,
                           };

                foreach (var row in Grdquery)
                {
                    DataRow r = Table.NewRow();
                    r["Id"] = row.Id;//0
                    r["Year"] = row.Year;//1
                    r["Worker_Code"] = row.Worker_Code;//2
                    r["Worker_Name"] = row.Worker_Name;//3
                    r["Position_Name"] = row.Position_Name;//4
                    r["Year_Name"] = row.Year_Name;//5
                    r["Receipt_Date"] = row.Receipt_Date;//6
                    r["SgkSalary"] = row.SgkSalary;//7
                    r["SgkAgi"] = row.SgkAgi;//8
                    r["Salary"] = row.Salary;//9
                    r["Overtimes_Salary"] = row.Overtimes_Salary;//10
                    r["Food_Price"] = row.Food_Price;//11
                    r["Road_Price"] = row.Road_Price;//12
                    r["Currency"] = row.Currency;//13
                    r["Worker_Position"] = row.Worker_Position;//14

                    Table.Rows.Add(r);
                }


Что я уже пробовал:

вопрос :здесь 45 сотрудников. Каждый сотрудник имеет по крайней мере одну зарплатную запись за этот год. Но 10 сотрудников имеют 2 оклада. Все записи появляются в моем запросе ниже. Никаких проблем с одиночными записями. Но мне нужна последняя запись персонала с 2 записями. Как мы можем ее решить?

Member 13768545

вопрос решен.
Список<v_salaries> Grdquery = db.V_Salaries.Где(i => i.InOut_Flag == 0 && i.Year == cariyil).OrderBy(x => x.Worker_Name).ThenBy(x => x.Year_Name)
.Метод groupBy(г =&ГТ; г. Worker_Code, (ключ,) =&ГТ; а.OrderByDescending(б => б.ИД).Метода firstordefault())
.Список();

1 Ответов

Рейтинг:
6

OriginalGriff

Используйте Перечислимый.Метод GroupBy (System.Linq) | Microsoft Docs[^] чтобы ограничить ваши данные персоналом ровно двумя строками - затем закажите их и выберите последнюю строку.


Maciej Los

5ed!