#c# #.net #entity-framework #linq
Вопрос:
public class Offer
{
public int OfferId { get; set; }
public string OfferName { get; set; }
public ICollection<Item> Items { get; set; }
}
public class Item
{
public int ItemId { get; set; }
public string PartNo { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
public int OfferId { get; set; }
public Offer Offer { get; set; }
}
public class OfferSum
{
public int OfferId { get; set; }
public string OfferName { get; set; }
public int ItemCount { get; set; }
public decimal TotalSum { get; set; }
}
У меня есть 3 класса: Предложение, Товары и просмотр, называемый OfferSum. Я хотел бы использовать LINQ для заполнения представления OfferSum.
FindAll() is returning IQueryable<Offer>
ItemCount должен возвращать количество товаров, включенных в предложение, totalSum должен возвращать цену * Количество товаров, включенных в предложение. Но я не знаю, как написать запрос.
У меня есть что-то вроде этого:
var result = FindAll().
Include(x=> x.Items).
GroupBy(x => new { x.OfferId, x.OfferName})
.Select(b => new OfferSum
{
OfferName = b.Key.OfferName,
OfferId = b.Key.OfferId,
ItemCount = b.Count(dont know),
TotalSum = b.Sum(dont know)
});
Комментарии:
1.
ItemCount = b.Key.Items.Count()
?
Ответ №1:
Что-то вроде этого. Написано с использованием синтаксиса запроса, потому что он более понятен для понимания.
var query =
from o in FindAll()
from i in o.Items
group i by new { o.OfferId, o.OfferName } into g
select new OfferSum
{
OfferName = g.Key.OfferName,
OfferId = g.Key.OfferId,
ItemCount = g.Count(),
TotalSum = g.Sum(x => x.Price * x.Quantity)
};