Имя: Пароль:
IT
 
Подскажите с LINQ
0 Иде я?
 
модератор
09.11.12
15:06
Есть список1 , есть второй список2, в котором есть ссылка на список 1 и сумма.
Надо вывести всё из списка1 ,и через Left outer JOIN присоединить суммы из второго списка с группировкой по ID

select Table_1.Name,Table_1.Summa1,Td2.Summa2 from Table_1
left outer  join (select Table_2.Id1 , Sum(Table_2.Summa2)as summa2 from Table_2  group by Table_2.ID1)  as td2
ON Table_1.ID=td2.id1

Вот на SQL

КАк все это перевести на LINQ ?
Сижу втыкаю -ну не могу воткнуть...
1 Иде я?
 
модератор
09.11.12
15:10
http://www.coding4.net/post/linq-left-join-example-in-c.aspx

Давайте рассмотрим Left Outer Join между коллекциями Книг и Заказов:

var orderForBooks = from bk in bookList
           join ordr in bookOrders
           on bk.BookID equals ordr.BookID
           into a
           from b in a.DefaultIfEmpty(new Order())
           select new
           {
               bk.BookID,
               Name = bk.BookNm,
               b.PaymentMode
           };

foreach (var item in orderForBooks)
   Console.WriteLine(item);

Console.ReadLine();
2 Иде я?
 
модератор
09.11.12
15:25
var q =

       from c in Table_1s

       join p in Table_2s on c.ID equals p.Id1 into ps

       from p in ps.DefaultIfEmpty()

       select new { Id = c.ID,Summa = c.Summa1, Name = p.Summa2 == null ? 0 : p.Summa2 };
       
       
       q.Dump();
проверено в LINQPAD
теперь осталось сделать group by и SUM
3 Иде я?
 
модератор
09.11.12
15:36
попробовал так:
var q =

       from t2 in Table_2s
       group t2 by t2.Id1 into t2g
       join t1 in Table_1s on t2g.id1 equals t1.ID into ps

       from p in ps.DefaultIfEmpty()

       select new { Id = t1.ID,Summa = t1.Summa1, Name = t1.Name, Summa2 == null ? 0 : t2g.Summa2 };
       
       
       q.Dump();

Выходит ошибка:
Недопустимый декларатор анонимного члена типа. Анонимные члены типа должны объявляться с помощью назначения члена, простого имени или доступа члена.
4 Иде я?
 
модератор
09.11.12
15:41
аУ, гуры - вы где ?
5 Serginio1
 
09.11.12
15:45
http://www.rsdn.ru/ сюда обратись. Давно не брал я в руки Linq
6 Иде я?
 
модератор
09.11.12
16:08
var objList = from ListData in
                 (from a in Table_1s
                  join b in Table_2s on a.ID equals b.Id1 into t2
                  from t2Data in t2.DefaultIfEmpty()
                  select new
                  {
                      Name = a.Name,
                      Summa2 = t2Data.Summa2,
                      Summa1 = a.Summa1
                  }
               )
             group ListData by new
             {
                 ListData.Name,
                 ListData.Summa1
             } into GroupData
             select new
             {
                 Name = GroupData.Key.Name,
                 Summa1 = GroupData.Key.Summa1,
                 Summa2 = GroupData.Sum(OL => OL.Summa2)
             };
Разобрался (в смысле нагуглил)
пашет