C# 如果找到匹配项,请选择特定记录,否则请选择i分组中的第一条记录<;T>;
以下是我的LINQ查询:C# 如果找到匹配项,请选择特定记录,否则请选择i分组中的第一条记录<;T>;,c#,linq,C#,Linq,以下是我的LINQ查询: pmcPrices = (from pd in interfaceCtx.PmcPriceDatas where pd.ClientIdValue != null && pd.ClientIdCode == "FII" && (pd.MetricVal != null || pd.PMCPrice1 != null || pd.PMCPrice
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”中的第一个记录。您可以使用
你可以用一个
如果没有匹配项(只要您得到一个匹配项),或者如果您使用的Linq提供程序具有稳定的
OrderBy
(Linq到使用它的对象和提供程序是,大多数不是),那么:
否则:
g => g.FirstOrDefault(p => p.FeedCode == "EQRMS-CB") ?? g.FirstOrDefault()
如果没有匹配项(只要您得到一个匹配项),或者如果您使用的Linq提供程序具有稳定的
OrderBy
(Linq到使用它的对象和提供程序是,大多数不是),那么:
否则:
g => g.FirstOrDefault(p => p.FeedCode == "EQRMS-CB") ?? g.FirstOrDefault()
我可能会将此作为两个查询来执行。如果第一个没有使用FeedCode(not.Any())返回值,那么运行第二个,而不使用where子句,该子句只执行order by并返回第一条记录。否则LINQ可能会变得非常复杂……只要确保对
的调用是确定的,就可以对组中的元素进行排序。没有什么比运行相同的代码并得到不同的结果更糟糕的了。我可能会把这当作两个查询来做。如果第一个没有使用FeedCode(not.Any())返回值,那么运行第二个,而不使用where子句,该子句只执行order by并返回第一条记录。否则LINQ可能会变得非常复杂……只要确保对的调用是确定的,就可以对组中的元素进行排序。没有什么比运行相同的代码并得到不同的结果更糟糕的了。或者g=>g.FirstOrDefault(p=>p.FeedCode==“EQRMS-CB”)??g、 First()
或g=>g.FirstOrDefault(p=>p.FeedCode==“EQRMS-CB”)??g、 First()
g => g.FirstOrDefault(p => p.FeedCode == "EQRMS-CB") ?? g.FirstOrDefault()