如果找到匹配,则选择特定的记录,否则在IGrouping中找到第一个记录
本文关键字:记录 IGrouping 第一个 选择 如果 | 更新日期: 2023-09-27 18:17:28
下面是我的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'中的第一个记录
可以使用三元操作符
..
.ToDictionary(g => Convert.ToInt32(g.Key),
g => g.Any(p => p.FeedCode == "EQRMS-CB")
? g.First(p => p.FeedCode =="EQRMS-CB")
: g.First())
如果没有匹配,只要你得到一个,或者如果你正在使用具有稳定OrderBy
的Linq提供程序(Linq到使用它的对象和提供程序是,大多数不是),那么:
g => g.OrderBy(p => p.FeedCode != "EQRMS-CB").FirstOrDefault()
否则:
g => g.FirstOrDefault(p => p.FeedCode == "EQRMS-CB") ?? g.FirstOrDefault()