如果找到匹配,则选择特定的记录,否则在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'中的第一个记录

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

可以使用三元操作符

..
.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()