是否存在转换ILookup<DateTime,List<int>> to ILookup<DateTime,int>的方法?
我正在用"ToLookup“方法创建查找,但是我无法以我想要的方式创建它。我一直被List<int>所困,而不是仅仅是int。
另一个问题(它也可以解决我的问题)--我应该如何从IGrouping<DateTime,MyModel>创建查找以获得ILookup<DateTime,int>
MyModel包含两个整数min,max,我希望查找日期在它们之间有所有整数(2,3,4,5)
编辑:我目前的方法是错误的。MyModel: DateTime Date int min int max
一开始我有IQueryable of MyModel。作为ILookup,我正在尝试获取每个日期可能的所有整数。
例如-假设我有2 MyModels。
1st
Date = 2.01.2016
min = 2
max = 5
2nd
Date = 2.01.2016
min = 9
max = 12我需要Lookup<DateTime, int>,它应该是<2.01.2016,<2,3,4,5,9,10,11,12>>
发布于 2016-04-11 20:26:06
对于每个MyModel,您可以创建一个键值对集合,其中键是Date属性,值从min到max (为此,必须使用Linq to Objects执行查询):
var pairs = models.AsEnumerable().SelectMany(
m => Enumerable.Range(m.Min, m.Max - m.Min + 1)
.Select(v => new { Key = m.Date, Value = v }));然后将此集合投影到查找中:
var lookup = pairs.ToLookup(kv => kv.Key, kv => kv.Value);发布于 2016-04-11 19:51:23
假设您的ILookup<DateTime,List<int>>拥有您想要与每个DateTime关联的所有int,那么您需要首先平整您的初始数据:
var flat = lookup1.SelectMany(i => i, (dt, num) => new {dt, num});这将为您提供与其int相关联的每个单独DateTime的对。然后可以使用ToLookup创建一个新的查找:
var lookup2 = flat.ToLookup(i => i.dt, i => i.num);发布于 2016-04-11 20:25:25
为了创建对数字的日期查找,首先需要生成所有可能的日期和数字组合。不清楚数据源是什么,但假设它来自某个数据库,则需要对它们进行排序(查找将按枚举的顺序排序),生成值的范围,然后创建查找。
var orderedData =
from x in context.MyModel
orderby x.Date, x.Min
select x;
var query =
(from x in orderedData.AsEnumerable()
from i in Enumerable.Range(x.Min, x.Max - x.Min + 1)
select new { x.Date, i }).ToLookup(x => x.Date, x => x.i);https://stackoverflow.com/questions/36557927
复制相似问题