我有这个网址,我得到了HTML,我可以废弃任何内容,没有任何问题。
我可以在数组中获取所有这些日期,列出任何内容。
我的问题是,我想知道哪个是最重复的月份。
示例here:
User ID Price Quantity Date of Purchase
n***m ( 34Feedback score is 10 to 49) GBP 1.95 1 Nov-11-13 12:33:49 PST
v***e ( 260Feedback score is 100 to 499) GBP 1.95 1 Nov-07-13 04:52:25 PST
r***t ( 340Feedback score is 100 to 499) GBP 1.95 1 Nov-05-13 19:14:07 PST
c***a ( 341Feedback score is 100 to 499) GBP 1.95 1 Nov-03-13 01:33:42 PST
c***m ( 669Feedback score is 500 to 999) GBP 1.95 1 Nov-02-13 12:08:03 PDT
1***a ( 158Feedback score is 100 to 499) GBP 1.95 1 Nov-02-13 09:15:35 PDT
t***r ( 60Feedback score is 50 to 99) GBP 1.95 1 Nov-01-13 15:13:37 PDT
o***o ( 84Feedback score is 50 to 99) GBP 1.95 1 Oct-29-13 09:36:58 PDT
i***0 ( 10Feedback score is 10 to 49) GBP 1.95 1 Oct-27-13 14:57:35 PDT
m***a ( 476Feedback score is 100 to 499) GBP 1.95 1 Oct-23-13 08:58:14 PDT
u***e ( 20Feedback score is 10 to 49) GBP 1.95 1 Oct-22-13 05:15:39 PDT
l***w ( 101Feedback score is 100 to 499) GBP 1.95 1 Oct-17-13 10:55:17 PDT
6***6 ( 504Feedback score is 500 to 999) GBP 1.95 1 Oct-15-13 15:31:10 PDT
m***c ( 329Feedback score is 100 to 499) GBP 1.95 1 Oct-09-13 07:22:49 PDT
e***e ( 313Feedback score is 100 to 499) GBP 1.95 1 Oct-03-13 22:39:48 PDT
0***z ( 11Feedback score is 10 to 49) GBP 1.95 1 Oct-02-13 09:18:02 PDT
k***. ( 128Feedback score is 100 to 499) GBP 1.95 1 Oct-01-13 10:02:15 PDT
v***v ( 127Feedback score is 100 to 499) GBP 1.95 1 Sep-30-13 09:41:30 PDT
n***g ( 32Feedback score is 10 to 49) GBP 1.95 1 Sep-30-13 09:19:57 PDT
你会看到一个项目已售出的历史记录有很多个月。如何获得最多日期的月份?在这里,September
。我想这样做是因为这样我可以获得更准确的销售历史数据,因为我必须计算月平均值。有什么想法吗?
我正在考虑将它全部放入DataTable中,如:
Price Quantity Date DateMonth
10 1 Nov-11-13 Nov
34 2 Nov-10-13 Nov
10 3 Oct-11-13 Oct
20 1 Oct-9-13 Oct
20 1 Oct-7-13 Oct
如果这样做,我们仍然无法直接使用查询来计算最大月份吗?
答案 0 :(得分:2)
发表评论 - 以下是您可能正在寻找的答案:
var query = from d in DateMonth
group d by d into g
select new {g.Key, Count = g.Count()};
int MostAppearingMonthAmount = query.Max(g => g.Count);
IEnumerable<string> MostAppearingMonth = query
.Where(g => g.Count == MostAppearingMonthAmount)
.Select(g => g.Key);
您现在有一个列表,其中包含月份(或月份,如果有2个月或更多个月,且具有相同的金额),可以迭代。为了获得一个月,您可以使用简单的“.FirstOrDefault()”来使用该语句,并使用字符串而不是IEnumerable。
现在您需要做的就是计算您在给定月份的需求。
答案 1 :(得分:0)
要获得最高日期,我首先将所有找到的日期转换为DateTime
:
MatchCollection matches = Regex.Matches(myString, @"[A-z]{1}[a-z]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}");
此正则表达式查找所有日期。
List<DateTime> dates = new List<DateTime>();
foreach (Match item in matches)
{
dates.Add(DateTime.ParseExact(item.Value, "MMM-dd-yy HH:mm:ss", provider));
}
我将日期转换为DateTime对象,并将它们按月分组:
List<List<DateTime>> groupedMonths = dates.GroupBy(x => x.Month).Select(grp => grp.ToList()).ToList();
然后我按照一个月的出现次数订购列表:
groupedMonths = groupedMonths.OrderByDescending(x => x.Count).ToList();
之后我通过调用List的第一个元素来获得最高月数:
string highestCountMonth = string.Format("The month {0} has most dates. Count: {1}", CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(groupedMonths[0][0].Month), groupedMonths[0].Count);
简而言之,就是这样:
List<List<DateTime>> groupedMonths = dates.GroupBy(x => x.Month).Select(grp => grp.ToList()).OrderByDescending(x => x.Count).ToList();