Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом на LINQ / 5 сообщений из 5, страница 1 из 1
12.09.2014, 19:17
    #38745544
Gekiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на LINQ
Всем привет!
Есть таблица с полями

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
12.09.2014, 20:04
    #38745573
gandjustas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на LINQ
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
15.09.2014, 12:21
    #38746676
Gekiss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на LINQ
gandjustas спасибо за помощь.

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

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

Может быть есть совершенно другое решение этой задачи.
...
Рейтинг: 0 / 0
15.09.2014, 13:48
    #38746781
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на LINQ
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
16.09.2014, 08:20
    #38747421
some1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом на LINQ
авторПерефразирую задание:
Если присутствуют две строки с одинаковыми 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
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с запросом на LINQ / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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