Результаты Linq Group DataTable по максимальному значению - PullRequest
0 голосов
/ 29 января 2019

Я работаю над удалением некоторых записей и пытаюсь использовать GroupBy в Linq, но безуспешно.

DataTable prices = (from t1 in product.AsEnumerable()
    join t2 in info.AsEnumerable() on (string)t1["productId"] equals (string)t2["productId"]
    where t1["Date"] == string.Empty || t1["Date"] == null
    select new {
        reference_id = t1["RscId"],
        last_name = t2["Last"],
        first_name = t2["First"],
        credentials = t2["Title"],
        price= t1["price"]
    }
)
.Distinct().CopyToDataTable();

Я могу получить самые высокие цены для каждой строки, но не могу получить доступ к другойстолбцы, использующие объект g со следующим кодом:

var result = from row in prices.AsEnumerable()
    group row by new { price= row["price"] } into g
    select new
    {
        HighestPrice = g.Max(x => x["price"])
    };

Как получить все столбцы из входящих данных, но ограничить строки столбцами с максимальным значением в столбце?

1 Ответ

0 голосов
/ 29 января 2019

После вашего последнего комментария начинает понимать, что вы спрашиваете.У вас есть данные о товарах, цены на которые могут быть одинаковыми.Вы хотите знать продукты, имеющие самую высокую цену.

Таким образом, группировка по цене является возможным подходом.Для этого вам нужна группа с наивысшей клавишей:

var products = new DataTable();
products.Columns.Add("ProductId", typeof(string));
products.Columns.Add("Name", typeof(string));
products.Columns.Add("Price", typeof(int));

int j = 0;
for (int i = 0; i < 30; i++)
{
    j++;
    products.Rows.Add(new object[] { i + 1, $"Prod{i:00}", i/10 + 1 });
}

var result = products.AsEnumerable().GroupBy(r => r.Field<int>("Price"))
    .OrderByDescending(g => g.Key)
    .Take(1);

, которая дает вам (в Linqpad):

enter image description here

из трех групп с ценами 1, 2 и 3.

...