这是我的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"));
我想要达到的目标是组中的任何记录' g'有FeedCode ==' EQRMS-CB'选择该记录否则首先记录在组' g'。
答案 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()