Как в C# с помощью LINQ сделать выборку классов с одинаковым значением в поле?
Например, есть JSON
var products = JArray.Parse(@"[{
id: 1,
name: 'Product 1',
variantId: 1
}, {
id: 2,
name: 'Product 2',
variantId: 1
}, {
id: 3,
name: 'Product 3',
variantId: 1
}, {
id: 4,
name: 'Product 4',
variantId: 4
}, {
id: 5,
name: 'Product 5',
variantId: 4
}]");
Как мне получить массив всех массивов, variantId которых равен 1? То есть, в итоге, что бы было это:
var products = JArray.Parse(@"[{
id: 1,
name: 'Product 1',
variantId: 1
}, {
id: 2,
name: 'Product 2',
variantId: 1
}, {
id: 3,
name: 'Product 3',
variantId: 1
}]");
Ответы (1 шт):
Автор решения: Mark Shevchenko
→ Ссылка
Ответ 1
Возможно, вы знаете то значение variantId, по которому хотите фильтровать. Если так, то фильтрация осуществляется с помощью метода Where:
var filtered = products.Where(x => x.variantId == 1);
Или, в облегчённом синтаксисе:
var filtered = from product in products
where product.variantId = 1
select product;
Ответ 2
Возможно, вы хотите получить все массивы с разными значениями variantId, которые встречаются в массиве. В этом случае вам нужна группировка:
var groups = products.GroupBy(x => x.variantId);
foreach (var group in groups)
{
Console.WriteLine(group.Key); // уникальное значение ключа группы, в нашем случае variantId
foreach (var elements in group)
{
Console.WriteLine($"id: {group.id}, name: {group.name}");
}
}