Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq подзапрос / 9 сообщений из 9, страница 1 из 1
07.06.2010, 16:24
    #36673652
khSerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
Подскажите как переделать запрос в LINQ:

Код: plaintext
1.
2.
3.
SELECT таблица1.por, Count(таблица1.countR) AS [Count-countR]
FROM таблица1, (SELECT por AS pr, max(CountR) AS cr FROM таблица1 GROUP BY por)  AS t
WHERE ((таблица1.countR=[cr]) AND (таблица1.por=[pr]))
GROUP BY таблица1.por;

Я не могу разобраться с вложенным под запросом, чтобы его потом использовать в WHERE...
...
Рейтинг: 0 / 0
08.06.2010, 13:41
    #36675373
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
как-то так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
class JoinKey
    {
      public int pr { get; set; }

      public int cr { get; set; }

      public override int GetHashCode()
      {
        return pr ^ cr;
      }

      public override bool Equals(object obj)
      {
        var k = obj as JoinKey;
        return k != null && k.GetHashCode().Equals(GetHashCode());
      }
    }

//
//
//

var value = tab1.GroupBy(t => t.por).Select(t => new JoinKey { pr = t.Key, cr = t.Max(tt => tt.CountR) }).Join(tab1, a => a, t => new JoinKey { pr = t.por, cr = t.CountR }, (a, t) => t).GroupBy(t => t.por).Select(t => new { por = t.Key, Count_countR = t.Count() });
...
Рейтинг: 0 / 0
08.06.2010, 14:58
    #36675652
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
from t in db.table1s
from t0 in (
	(from t01 in db.table1s
	group t01 by new {
	  t01.por
	} into g
	select new {
	  pr = (System.Int32?)g.Key.por,
	  cr = g.Max(p => p.countR)
	}))
where
  t.countR == t0.cr &&
  t.por == t0.pr
group t by new {
  t.por
} into g
select new {
  por = (System.Int32?)g.Key.por,
  Count-countR = g.Count()
}
...
Рейтинг: 0 / 0
08.06.2010, 15:06
    #36675675
khSerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
Super! Да, я только в начале пути освоения LINQ :) тяжелая строчка...только немного не то выдает :(
здесь получатся count строк по por, а мне необходимо число групп с макс числом countR, т.е.
Код: plaintext
1.
2.
3.
4.
por | countR  
 1  | 2
 1  | 1
 2  | 2
 2  | 1
будет
Код: plaintext
1.
2.
por | count_countR 
 1  | 1
 2  | 1
...
Рейтинг: 0 / 0
08.06.2010, 15:14
    #36675699
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
Вы о каком запросе, о pation или о моём?

...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
var db = new DataClassesDataContext();
var x = from t in db.table1s
        from t0 in
            (
                (from t01 in db.table1s
                    group t01 by new
                    {
                        t01.por
                    } into g
                    select new
                    {
                        pr = (System.Int32?)g.Key.por,
                        cr = g.Max(p => p.countR)
                    }))
        where
            t.countR == t0.cr &&
            t.por == t0.pr
        group t by new
        {
            t.por
        } into g
        select new
        {
            por = (System.Int32?)g.Key.por,
            CountCountR = g.Count()
        };
...
Рейтинг: 0 / 0
08.06.2010, 15:14
    #36675701
khSerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
эх, описывал подробнее ситуацию, а уже правильный ответ прислали :))
Второй вариант от МСУ правильный...спасибо большое!
Будем дальше осваивать...
...
Рейтинг: 0 / 0
08.06.2010, 15:23
    #36675726
khSerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
Странно я пробовал подобную конструкцию только
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
from t0 in (
	(from t01 in Table_1s
	group t01 by new {
	  t01.Por
	} into g
	select new {
	  pr = g.Key.Por,
	  cr = g.Max(p => p.CountR)
	}))
я в let засовывал...
...
Рейтинг: 0 / 0
08.06.2010, 15:55
    #36675843
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
сори за неправильный ответ GetHashCode не правильно составил
нужно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class JoinKey
  {
    public int pr { get; set; }

    public int cr { get; set; }

    public override int GetHashCode()
    {
      //return pr ^ cr;
      //неправильно, получается 1,2==2,1
      return string.Format("{0}-{1}", pr, cr).GetHashCode();
    }

    public override bool Equals(object obj)
    {
      var k = obj as JoinKey;
      return k != null && k.GetHashCode().Equals(GetHashCode());
    }
  }
...
Рейтинг: 0 / 0
08.06.2010, 16:12
    #36675892
khSerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq подзапрос
Да и этот вариант теперь правильный...
только для моего понимания тяжеловат:))уж извините...
Спасибо всем большое...а то я уже хотел отказываться от LINQ :((
а так буду дальше его мучать! :)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq подзапрос / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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