Nibin22 Ответов: 1

Группы на объект DataTable с#


Здравствуйте Друзья,

У меня есть таблица со следующей структурой :

Фруктовое Название | Гнилое

Яблоко - да
Яблоко - нет
Яблоко - нет
Яблоко - нет
Оранжевый - нет
Оранжевый - нет
Оранжевый - нет
Оранжевый - нет
Оранжевый - да
Оранжевый - да
Оранжевый - нет

Я хочу сгруппировать эту информацию и должен сформировать таблицу с приведенной ниже структурой.

Фруктовое название | нет гнилых | всего нет
Яблоко - 1 - 4
Оранжевый - 2 - 7

Не могли бы вы помочь мне, как я должен получить эту группу с помощью SELECT on data table?

Что я уже пробовал:

С помощью Select на таблицу, мы можем сделать группу.
Но как узнать общее количество записей, проверенных с определенной категорией?

CHill60

Покажите код, который вы используете до этого момента

1 Ответов

Рейтинг:
9

Maciej Los

Попробовать это:

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[]
	{
		new DataColumn("Fruit Name", typeof(string)),
		new DataColumn("Is Rotten", typeof(string))		
	});

dt.Rows.Add(new object[]{"Apple", "yes"});
dt.Rows.Add(new object[]{"Apple", "no"});
dt.Rows.Add(new object[]{"Apple", "no"});
dt.Rows.Add(new object[]{"Apple", "no"});
dt.Rows.Add(new object[]{"Orange", "no"});
dt.Rows.Add(new object[]{"Orange", "no"});
dt.Rows.Add(new object[]{"Orange", "no"});
dt.Rows.Add(new object[]{"Orange", "no"});
dt.Rows.Add(new object[]{"Orange", "yes"});
dt.Rows.Add(new object[]{"Orange", "yes"});
dt.Rows.Add(new object[]{"Orange", "no"});

var result = dt.AsEnumerable()
	.GroupBy(x=>x.Field<string>("Fruit Name"))
	.Select(grp=> new
	{
		FruitName = grp.Key,
		NoOfRotten = grp.Count(x=>x.Field<string>("Is Rotten")=="yes"),
		TotalNo = grp.Count()
	})
	.ToList();

Console.WriteLine("{0}\t|\t{1}\t|\t{2}", "FruitName", "NoOfRotten", "TotalNo");
foreach(var r in result)
{
	Console.WriteLine("{0}\t|\t{1}\t|\t{2}", r.FruitName, r.NoOfRotten, r.TotalNo);
}


Результат:
FruitName  |  NoOfRotten  |  TotalNo
Apple  |  1  |  4
Orange  |  2  |  7


Nibin22

Спасибо за ответ! Это прекрасно сработало!

Maciej Los

Всегда пожалуйста.