В linq я пытаюсь присоединиться к datatables. Теперь, как я могу группировать по запросу linq. Что я пробовал до сих пор.Группа по условию в linq? Соединение таблицы в linq?
var resultstatu = from table1 in dtFetch.AsEnumerable()
join table2 in dssap.AsEnumerable() on (string)table1["SAPQuotationNo"] equals (string)table2["Quationno"]
select new {
EMDNo = (int)table1["EMDNo"],
Quationno = (string)table2["Quationno"],
CustomerCode = (string)table2["CustomerCode"],
InvoiceQuantity = (string)table2["InvoiceQuantity"],
InvoiceValue = (string)table2["InvoiceValue"]
};
Теперь, когда я хочу написать группу для вышеуказанного linq. помочь мне
Из вышеприведенного LINQ я получаю данные, как:
EMDNO QuationNo CustomerCode InvoiceQuantity Invoicevalue
----- --------- ------------ ------------- -------------
1234 16001 H152 20.00 450
1234 16001 H152 20.00 450
Я хочу быть выше результат, как:
EMDNO QuationNo CustomerCode InvoiceQuantity Invoicevalue
----- --------- ------------ -------------- -----------
1234 16001 H152 40.00 9000
Я пытался так:
var resultstatu = from table1 in dtFetch.AsEnumerable()
join table2 in dssap.AsEnumerable() on (string)table1["SAPQuotationNo"] equals (string)table2["Quationno"]
group new { table1, table2 } by
new
{
Quationno = table2.Field<string>("Quationno"),
MaterialCode = table2.Field<string>("MaterialCode"),
EMDNo = table1.Field<int>("EMDNo"),
QuotationDate= table2.Field <string>("QuotationDate"),
QuotionQuantity = table2.Field<string>("QuotionQuantity"),
InvoiceQuantity = table2.Field<string>("InvoiceQuantity"),
InvoiceValue = table2.Field<string>("InvoiceValue"),
MaterialName = table2.Field<string>("MaterialName"),
}
into sasi
select new {
EMDNo = sasi.Key .EMDNo ,
Quationno= sasi.Key.Quationno ,
QuotationDate=sasi.Key.QuotationDate ,
MaterialCode= sasi.Key.MaterialCode ,
QuotionQuantity=sasi.Key.QuotionQuantity ,
MaterialName=sasi .Key.MaterialName,
InvoiceQuantity = Convert.ToString(sasi.Sum(x => x.table2.Field<decimal>("InvoiceQuantity"))),
InvoiceValue = Convert.ToString(sasi.Sum(x => x.table2.Field<decimal>("InvoiceValue")))
//InvoiceQuantity = sasi.Key.InvoiceQuantity,
//InvoiceValue = sasi.Key.InvoiceValue
};
вышеупомянутый запрос linq вызывает исключение. Указанный сброс недействителен.
Я попытался, как LINQ ниже:
var resultstatu = from table1 in dtFetch.AsEnumerable()
join table2 in dssap.AsEnumerable() on (string)table1["SAPQuotationNo"] equals (string)table2["Quationno"]
group new { table1, table2 } by
new
{
Quationno = table2.Field<string>("Quationno"),
MaterialCode = table2.Field<string>("MaterialCode"),
EMDNo = table1.Field<int>("EMDNo"),
QuotationDate = table2.Field<string>("QuotationDate"),
QuotionQuantity = table2.Field<string>("QuotionQuantity"),
InvoiceQuantity = table2.Field<string>("InvoiceQuantity"),
InvoiceValue = table2.Field<string>("InvoiceValue"),
MaterialName = table2.Field<string>("MaterialName"),
}
into sasi
select new {
EMDNo = sasi.Key .EMDNo ,
Quationno= sasi.Key.Quationno ,
QuotationDate=sasi.Key.QuotationDate ,
MaterialCode= sasi.Key.MaterialCode ,
QuotionQuantity=sasi.Key.QuotionQuantity ,
MaterialName=sasi .Key.MaterialName,
InvoiceQuantity = sasi.Sum((r) => decimal.Parse(r.table2.Field<string>("InvoiceQuantity"))).ToString(),
InvoiceValue = sasi.Sum((r) => decimal.Parse(r.table2.Field<string>("InvoiceValue"))).ToString() }
;
Но из приведенного выше запроса он рассматривает "invoicequantity, invoicevalue" в группе. если «InvoiceQuanity» - это то же самое, тогда сумма другая разумна - это не сумма. тот же «Invoicevalue», если invoicevalue такой же, как 450, тогда он суммирует другие мудрые данные не является суммой
Wel l Какие исследования вы сделали для группировки в LINQ? Поиск «group by linq msdn» получает множество результатов ... –
yeah jon Skeet, но я хочу группу больше, чем на столбец, который я попробовал: group new {table1, table2} by table2.Field («Quationno») в саси. но я хочу больше, чем один Fild, например, Emdno, customercode –
Поиск «группы по нескольким столбцам linq» в Stack Overflow, и вы получите * lots * хитов ... –