Chciałbym pogrupować moje zapytanie LINQ przez ItemNumber
i zwrócić całą tabelę z całkowitą wartością Quantity
.Grupowanie wyrażeń Lambda przez C#
Example:
ItemNumber - ItemName - Quantity
100 Item1 1
150 Item2 2
100 Item1 2
200 Item3 1
150 Item2 2
Should be:
ItemNumber - ItemName - Quantity
100 Item1 3
150 Item2 4
200 Item3 1
To jest kwerenda Próbuję grupy:
public IQueryable<WebsiteOrderStatus> GetOrderStatusByAccountNumberWithoutDeleted
(string accountNumber)
{
return db.WebsiteOrderStatus
.Where(x => x.AccountNumber == accountNumber && x.LastUpdatedStatus != 1);
}
I mój najlepszy wynik do tej pory (to nie można skompilować choć):
public IQueryable<IGrouping<Int32?, WebsiteOrderStatus>> lol(string accountNumber)
{
db.WebsiteOrderStatus
.Where(x => x.AccountNumber == accountNumber && x.LastUpdatedStatus != 1)
.GroupBy(g => g.ItemNumber)
.Select(g => new
{
g.Key.ItemNumber,
Column1 = (Int32?)g.Sum(p => p.Quantity)
});
}
EDIT:
Dzięki za odpowiedzi wszystkim, muszę się z tym zmierzyć. Te anonimowe typy są dość trudne do pracy z moim zdaniem, więc znalazłem inne rozwiązanie.
Zrobiłem inną metodę, która sumuje ilość elementów użytkowników i zgrupowuje pierwszą.
public IQueryable<WebsiteOrderStatus> GetOrderStatusByAccountNumberWithoutDeleted(string accountNumber)
{
return db.WebsiteOrderStatus.Where(x => x.AccountNumber == accountNumber && x.LastUpdatedStatus != 1).GroupBy(x => x.ItemNumber).Select(grp => grp.First());
}
public int GetQuantityOfUsersItem(string accountNumber, string itemNumber)
{
return db.WebsiteOrderStatus.Where(x => x.ItemNumber == itemNumber && x.AccountNumber == accountNumber).Sum(x => x.Quantity);
}
Na stronie, na której mam GridView zrobiłem:
var query = websiteOrderStatusRep.GetOrderStatusByAccountNumberWithoutDeleted(AppSession.CurrentLoginTicket.AccountNumber).Select(x => new { x.ItemName, x.ItemNumber, x.FormatName, x.Price, x.Status, x.Levering, Quantity = websiteOrderStatusRep.GetQuantityOfUsersItem(x.AccountNumber, x.ItemNumber)});
Nie wiem, co jeszcze jest źle, ale przynajmniej, ty” ponownie brakuje "powrotu" w drugiej próbce. – Ani
Jaki jest błąd kompilacji, który otrzymujesz? –
Prawdopodobnie próbuje traktować g.Key jako obiekt, podczas gdy to tylko int. Jeśli chce nazwy przedmiotu w wyniku, to będzie musiał również przechowywać go w kluczowym obiekcie (i uczynić klucze obiektem, który jest porównywalny) lub odczytać go z pierwszego wpisu w grupie enumberator, jak sądzę. – Rup