#c# #asp.net #asp.net-mvc #linq #c#-4.0
#c# #asp.net #asp.net-mvc #linq #c #-4.0
Вопрос:
для начала у меня есть класс, который в основном представляет все транзакции для определенных элементов, обычно это 100 элементов, для которых у меня есть транзакции. Класс выглядит следующим образом:
public class RawTransactions
{
public string SellerName { get; set; }
public int FeedBackScore { get; set; }
public int QuantityPurchased { get; set; }
public DateTime TransactionDate { get; set; }
public string ProductTitle { get; set; }
public double CurrentPrice { get; set; }
public double SalePrice { get; set; }
public string ItemID { get; set; }
public string Date { get; set; }
}
Основываясь на этом классе и транзакциях внутри списка этого типа, я создал функцию, которая в основном принимает наименьшую и наибольшую цену продажи любой транзакции, присутствующей в списке, и создает диапазон цен в 7 этапов
private List<double> GetRangeForElements(double minPrice, double maxPrice)
{
double step = (maxPrice - minPrice) / 7.00d;
return Enumerable.Range(0, 8).Select(i => minPrice i * step).ToList();
}
Так, например, если я передам 0 долларов (наименьшая цена продажи) и 10 долларов (наибольшая цена продажи), это создаст список из 7 ценовых диапазонов, подобных следующему:
0
1.5
3
4.5
6
7.5
9
10
Это можно интерпретировать как:
0 - 1.5 price range
1.5 - 3 price range
3 - 4.5 price range
4.5 - 6 price range
6 - 7.5 price range
// and so on...
Использование заключается в следующем:
var ranges = GetRangeForElements(0,10); // Here I will have the ranges now
Теперь, основываясь на этих диапазонах, которые были только что созданы, и существующих транзакциях, которые у меня есть, мне нужно определить следующие параметры:
- Ценовой диапазон
- Сколько продаж конкретного ItemId имеет продаж для определенного диапазона
- У скольких продавцов (на основе свойства SellerName) были продажи по определенному ценовому диапазону
- Сколько продавцов (опять же на основе свойства SellerName) НЕ было продаж по определенному ценовому диапазону
Я не совсем уверен, как я могу теперь объединить все эти данные, чтобы получить эти параметры с помощью LINQ? Кто-нибудь может мне помочь с этим?
P.S. ребята, транзакции по всем элементам хранятся в списке, подобном следующему:
var allItemsTransactions = new List<ProductResearchRawTransactions>();
P.S. ребята, это существующее решение, которое у меня есть, но оно дает мне совершенно неправильные результаты:
var priceRanges = ranges.Select(r => new PriceRangeGraph
{
Price = Math.Round(r, 2),
Sales = allItemsTransactions.Where(x => ranges.FirstOrDefault(y => y >= x.SalePrice) == r).Sum(x => x.QuantityPurchased),
SuccessfulSellers = allItemsTransactions.Where(x => ranges.FirstOrDefault(y => y >= x.SalePrice) == r).GroupBy(x => new { x.SellerName, x.QuantityPurchased }).Where(x => x.Key.QuantityPurchased > 0).Select(x => x.Key.SellerName).Count(),
UnSuccessfulSellers = allItemsTransactions.Where(x => ranges.FirstOrDefault(y => y >= x.SalePrice) == r).GroupBy(x => new { x.SellerName, x.QuantityPurchased }).Where(x => x.Key.QuantityPurchased == 0).Select(x => x.Key.SellerName).Count(),
}).ToList();
Комментарии:
1. Вы знаете, что SO не является бесплатным сервисом кодирования?
2. @Selvin Нет, я не это искал, у меня было решение, которое я пробовал, я публикую его сейчас, но оно дает мне совершенно неправильные результаты
3. @Selvin Я опубликовал первоначальное решение, которое у меня есть
4.
realranges.Select(r=>new {r, items = allItemsTransactions.Select(t=>t.SalePrice >= r.Item1 amp;amp; t.SalePrice < r.Item2).ToDictionary(a=>a.r, a.items)
гдеrealranges
находитсяTuple<double, double>
… я не тестировал это, но вам нужно что-то вроде этого…5. @Selvin Не уверен, что мне делать дальше с кортежем?: D