我有一些Product
结构,例如我ProductId
和ProductVariantId
。每种产品都可以有许多变体。
例如,Product1
可以包含变体1和2. Product2
可以包含变体1,2和3,因此我有以下列表:
ProductId: 1, ProductVariantId 1
ProductId: 1, ProductVariantId 2
ProductId: 2, ProductVariantId 1
ProductId: 2, ProductVariantId 2
ProductId: 2, ProductVariantId 3
我想要的是获取productId只有一个给定的变体。当productId没有给定变体时,我的机制应该取最大值。
因此,给定变体3
的示例应如下所示:
ProductId: 1, ProductVariantId 2 (maximum)
ProductId: 2, ProductVariantId 3
我试图这样做:
products.ToList().Where(x => x.ProductVariant == givenProductVariant)
我要添加的是distinct
上的某种数据库productId
并获得最大值。
请问一些帮助吗?
答案 0 :(得分:6)
您可以使用GroupBy
方法,bool
ProductVariantId = 3
或ProductVariantId desc
代替int productVariantId = 3;
var query = products.GroupBy(p => p.ProductId)
.Select(g => g.OrderByDescending(p => p.ProductVariantId == productVariantId)
.ThenByDescending(p => p.ProductVariantId)
.First()); // First ensures that we get one row per group
:
fetchResultsController
答案 1 :(得分:0)
class Product
{
public int ProductId { get; set; }
public int ProductVariantId { get; set; }
}
static void GetMaxProduct(IList<Product> list,int variant)
{
var query = from l in list
group l by l.ProductId into g
select g.FirstOrDefault(x => x.ProductVariantId == variant) ?? g.OrderBy(x => x.ProductVariantId).Last();
foreach (Product p in query)
{
Console.WriteLine("ProductId:" + p.ProductId + " ProductVariantId:" + p.ProductVariantId);
}
}
static void Main(string[] args)
{
List<Product> list = new List<Product>()
{
new Product{ ProductId=1, ProductVariantId=1},
new Product{ ProductId=1, ProductVariantId=2},
new Product{ ProductId=2, ProductVariantId=1},
new Product{ ProductId=2, ProductVariantId=2},
new Product{ ProductId=2, ProductVariantId=3},
};
GetMaxProduct(list, 3);
GetMaxProduct(list, 4);
GetMaxProduct(list, 1);
}