使用Linq在C#中基于字典对象查询数据

时间:2019-04-12 22:56:16

标签: c# linq

我正在编写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与字典月数组值进行比较

1 个答案:

答案 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)))