假设Myclass
中有两个属性:Date
,Symbol
我想经常在这两个属性之间进行转换,但我发现了
List <Myclass> vector
如果我使用
vector.groupby(o => o.Date).Select(o => o)
vector
不再是List<IGrouping<string, Myclass>>
如果我想将groupby(o => o.Date)
转换为groupby(o => o.Symbol)
我必须使用
vector.groupby(o => o.Date).Selectmany(o => o).groupby(o => o.Symbol)
我尝试使用SortedList<Date, Myclass>
,但我不熟悉SortedList
(实际上,我不知道SortedList
和Groupby
之间有什么区别。
是否有任何有效的方法来实现这种效果,因为我高度依赖于跑步的速度?
int volDay = 100;
Datetime today = new DateTime(2012, 1, 1);
//choose the effective database used today, that is the symbol with data more than volDay
var todayData = dataBase.Where(o => o.Date <= today).OrderByDescending(o => o.Date)
.GroupBy(o => o.Symbol).Select(o => o.Take(volDay))
.Where(o => o.Count() == volDay).SelectMany(o => o);
//Select symbols we want today
var symbolList = todayData
.Where(o => o.Date == today && o.Eqy_Dvd_Yld_12M > 0))
.OrderByDescending(o => o.CUR_MKT_CAP)
.Take((int)(1.5 * volDay)).Where(o => o.Close > o.DMA10)
.OrderBy(o => o.AnnualizedVolatility10)
.Take(volDay).Select(o => o.Symbol).ToList();
//Select the database again only for the symbols in symbolList
var portfolios = todayData.GroupBy(o => o.Symbol)
.Where(o=>symbolList.Contains(o.Key)).ToList();
这是我的真实代码,dataBase
是总数据,我将逐日运行循环(这里只是固定的一天)。最后一个列表portfolios
是我想要获得的最终目标,您可以忽略其他属性,这些属性用于Date
和Symbol
答案 0 :(得分:0)
如果您执行了.Distinct()
。
获得不同的Date
:
var distinctDates = vector.Select(o => o.Date).Distinct()
获得不同的Symbol
:
var distinctSymbols = vector.Select(o => o.Symbol).Distinct()
我问你想要完成什么,以便我能为你提供一个有用的答案。你需要两个价值观吗?例如,一组独特的符号和日期?您应该只需要一个group by语句,具体取决于您最终要实现的目标。
例如,如果您想要按多个属性进行分组并跟踪两个独特的数据,则此问题Group By Multiple Columns将是相关的。分组后.Distinct()
仍应有效。