powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом на LINQ
5 сообщений из 5, страница 1 из 1
Помогите с запросом на LINQ
    #38745544
Gekiss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Есть таблица с полями

Id Date MId Value Status 1 01.03.2014 1 100 M 2 01.03.2014 1 80 R 3 01.03.2014 2 110 M 4 01.03.2014 3 100 R 5 01.03.2014 4 60 R 6 01.03.2014 4 70 M

Нужно сделать выборку, в которой из повторяющихся строк по полям
Date и mId нужно оставить ту, что со статусом M

1 01.03.2014 1 100 M 3 01.03.2014 2 110 M 4 01.03.2014 3 100 R 6 01.03.2014 4 70 M



Удалось сделать запрос на SQL
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT * FROM (
SELECT mv.*, Row_Number() OVER(PARTITION BY mv.MId, mv.Date ORDER By mv.Status ASC) As r 
FROM mv
where 1 = 1
and mv.Date = '2014-03-01'
) as b
where r = 1




Но не могу написать запрос на LINQ.
...
Рейтинг: 0 / 0
Помогите с запросом на LINQ
    #38745573
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gekiss,
У тебя словесное описание с запросом не совпадает.


То что ты написал в SQL можно в Linq переписать так:
Код: c#
1.
2.
3.
4.
5.
6.
from mv in ctx.Mv
where ...
group mv by new { mv.MId, mv.Date } into gr
from g in gr
let f = g.OrderBy(e => e.Status).First()
select f;



Но запрос ужасный получится.
...
Рейтинг: 0 / 0
Помогите с запросом на LINQ
    #38746676
Gekiss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gandjustas спасибо за помощь.

Перефразирую задание:
Если присутствуют две строки с одинаковыми Date, Mid и разными статусами, то отобрать нужно ту, что со статусом М
Если только одна строка, то ее нужно оставить с тем статусом что есть.

Вы подметили верно в SQL одинаковые строки по полям Date, Mid сортируются по колонке Status, потом выбираю первую.
Это мое решение, оно не работает, если другой статус будет, например ‘I’

Может быть есть совершенно другое решение этой задачи.
...
Рейтинг: 0 / 0
Помогите с запросом на LINQ
    #38746781
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gekiss,

...если не использовать SELECT, а выгрузить таблицу во временную, то к временной можно применить следующий скрипт, чтобы получить ваш результат (как на linq - это уже вторая задача :) )
Код: sql
1.
2.
3.
delete T1 from doubleCheck T1, doubleCheck T2
where t1.MId = t2.MId and t1.MyDate = t2.MyDate
and t1.Status > t2.Status
...
Рейтинг: 0 / 0
Помогите с запросом на LINQ
    #38747421
some1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПерефразирую задание:
Если присутствуют две строки с одинаковыми Date, Mid и разными статусами, то отобрать нужно ту, что со статусом М
Если только одна строка, то ее нужно оставить с тем статусом что есть.

Вроде, можно вот так (не проверял)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
class Class1
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    public int MId { get; set; }
    public Char Status { get; set; }
}
        IQueryable<Class1> src = null;
        var grp1 = src
            .GroupBy(e => new { Date = e.Date, MId = e.MId })
            .Select(g => new { Date = g.Key.Date, MId = g.Key.MId, Count = g.Count() })
            .Where(e => e.Count > 1);
        //var qu
        IQueryable<Class1> qu
            = src.GroupJoin(grp1,
                ok => new { Date = ok.Date, MId = ok.MId },
                ik => new { Date = ik.Date, MId = ik.MId },
                (ok, ik) => new { Ok = ok, Ik = ik })
            .SelectMany(j => j.Ik.DefaultIfEmpty(), (j, ik) => new { J = j, Ik = ik })
            .Where(e => e.Ik == null || (e.Ik != null && e.J.Ok.Status == 'M'))
            .Select(e => e.J.Ok)
            ;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом на LINQ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]