我有一个存储在列表中的模型:
public class OrderDataModel
{
public string Product { get; set; }
public string Registry { get; set; }
public string ProjectID { get; set; }
public string ProjectName { get; set; }
public string ProjectTypeProtocol { get; set; }
public string ProjectGeography { get; set; }
public string Vintage { get; set; }
public string CCBQualified { get; set; }
public string CorsiaEligible { get; set; }
public int? BidQty { get; set; }
public decimal? Bid { get; set; }
public int? AskQty { get; set; }
public decimal? Ask { get; set; }
public string? ExecutionVenue { get; set; }
}
我有上述内容的清单。 我想获取所有匹配“产品”、“ProjectID”、“Vintage”、“CCBQualified”、“CorsiaEligible”和“ExecutionVenue”的“出价”金额的最大值和“要价”金额的最小值仅当计数大于一时。 因此,如果存在不匹配的项目,请忽略这些项目。
我尝试写这样的东西:
ordersModel
.GroupBy(a => new { a.ProjectID, a.Product, a.Vintage, a.CCBQualified, a.CorsiaEligible, a.ExecutionVenue })
.Select(b => new
{
ProjectID = b.Key.ProjectID,
Product = b.Key.Product,
Vintage = b.Key.Vintage,
CCBQualified = b.Key.CCBQualified,
ExecutionVenue = b.Key.ExecutionVenue,
max = b.Max(c => c.Bid),
min = b.Min(c => c.Ask)
});
我在没有分组的情况下得到了很多结果,并且很多 ProjectID 都是空白的。 我认为我没有正确执行选择部分,以及如何表示仅在所有这些值都匹配的情况下才进行选择。
我可以做这样的事情吗:
ordersModel
.GroupBy(a => new { a.ProjectID, a.Product, a.Vintage, a.CCBQualified, a.CorsiaEligible, a.ExecutionVenue })
.Select(b => new
{
ProjectID = b.Key.ProjectID,
Product = b.Key.Product,
Vintage = b.Key.Vintage,
CCBQualified = b.Key.CCBQualified,
ExecutionVenue = b.Key.ExecutionVenue,
max = b.Max(c => c.Bid),
min = b.Min(c => c.Ask),
count = b.Count()
});
添加计数字段,如果计数 > 1,则检索该记录?
在 LINQ 中包含
Where
子句
ordersModel
.GroupBy(a => new { a.ProjectID, a.Product, a.Vintage, a.CCBQualified, a.CorsiaEligible, a.ExecutionVenue })
.Where(g => g.Count() > 1)
.Select(b => new
{
ProjectID = b.Key.ProjectID,
Product = b.Key.Product,
Vintage = b.Key.Vintage,
CCBQualified = b.Key.CCBQualified,
ExecutionVenue = b.Key.ExecutionVenue,
max = b.Max(c => c.Bid),
min = b.Min(c => c.Ask)
});