如果找到匹配则选择特定记录否则IGrouping <t>中的第一个记录

时间:2015-10-12 12:00:13

标签: c# linq

这是我的LINQ查询:

pmcPrices = (from pd in interfaceCtx.PmcPriceDatas
            where
            pd.ClientIdValue != null
            && pd.ClientIdCode == "FII"
            && (pd.MetricVal != null || pd.PMCPrice1 != null || pd.PMCPrice2 != null)
            && pd.EffectiveDate.Value == eodDate.DateTime
            group pd by pd.ClientIdValue into g
            select g).ToDictionary(g => Convert.ToInt32(g.Key),
                                   g => g.SingleOrDefault(p => p.FeedCode == "EQRMS-CB"));

我想要达到的目标是组中的任何记录&#39; g&#39;有FeedCode ==&#39; EQRMS-CB&#39;选择该记录否则首先记录在组&#39; g&#39;。

2 个答案:

答案 0 :(得分:4)

您可以使用ternary operator

..
.ToDictionary(g => Convert.ToInt32(g.Key), 
         g => g.Any(p => p.FeedCode == "EQRMS-CB") 
                 ? g.First(p => p.FeedCode =="EQRMS-CB") 
                 : g.First())

答案 1 :(得分:1)

如果没有匹配,只要你得到一个,或者你正在使用一个稳定的OrderBy的linq提供者(对于使用的对象和提供者的linq),实际上并不重要当然,大部分都不是):

g => g.OrderBy(p => p.FeedCode != "EQRMS-CB").FirstOrDefault()

否则:

g => g.FirstOrDefault(p => p.FeedCode == "EQRMS-CB") ?? g.FirstOrDefault()