我正在编写linq查询,发现很难使用linq语法构造逻辑。基本上,我需要提取与indexid匹配的记录,并根据字典对象周期中的值过滤记录。字典对象包含键值对,其中包含年份和该年的月份。例如 一年将是2011年,一年中的几个月将是10,11,12
我需要根据每年的月份提取记录。因此,我的记录集应包含2011年的10,11和12个月以及2012年的2和3个月等数据。
App.filter('myfilter' , [function() {
return function(json1, products, index) {
// Filter all products, except the mime
productsFilter = products.filter(function(product, i) {
return i !== index;
});
// filter those that have not yet been selected
var json1Filter = json1.filter(function(item) {
// ask if there is the id in a product
return !productsFilter.some(function(product) {
return item.id == product.unique;
});
});
return json1Filter;
};
}]);
记录将例如
private List<Tuple<string, string, string, string>> GetFundStatistics(List<FundPerformanceVM> fundTrackRecord, int benchMark1, int benchMark2, Dictionary<int,int[]> period)
{
benchmark1Returns = GetViewService<MV_INDEX_PERFORMANCE>()
.Where(x => x.Mtd != null && x.IndexId == benchMark1 && 'Need to add the condition here' )
.Select(x => x.Mtd);
}
因此,在这里我可以执行PriceDate。 执行PriceDate.Month进行查询。但是我需要将数据库值的pricedate.year与包含年份的字典键值进行比较,同样,我需要将pricedate.Month与字典月数组值进行比较
答案 0 :(得分:0)
首先将period
字典拼合为(年,月)列表。
var periodTuples = period.ToList() // gives you List<KeyValuePair<int, int[]>>
.SelectMany(kvp =>
kvp.Value.Select(it2 => Tuple.Create(kvp.Key, it2)))
.ToHashSet(); // to optimize .Contains()
然后,内部条件仅是该(年,月)元组的.Contains()
。
.Where(x => x.Mtd != null && x.IndexId == benchMark1 &&
periodTuples.Contains(Tuple.Create(ptd.Year, ptd.Month)))