|
Подскажите с 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
|
Давайте рассмотрим 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
|
сюда обратись. Давно не брал я в руки 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)
};
Разобрался (в смысле нагуглил)
пашет
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший