你需要一个数据透视表:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace ConsoleApplication73
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("R.N", typeof(int));
dt.Columns.Add("Student Name", typeof(string));
dt.Columns.Add("Subjects", typeof(string));
dt.Columns.Add("Marks", typeof(int));
dt.Rows.Add(new object[] { 1, "Indra Poudel", "DBMS", 75 });
dt.Rows.Add(new object[] { 1, "Indra Poudel", "SAD", 75 });
dt.Rows.Add(new object[] { 1, "Indra Poudel", "TOC", 75 });
dt.Rows.Add(new object[] { 2, "John show", "DBMS", 75 });
dt.Rows.Add(new object[] { 2, "John show", "SAD", 75 });
dt.Rows.Add(new object[] { 2, "John show", "TOC", 75 });
string[] subjects = dt.AsEnumerable().Select(x => x.Field<string>("Subjects")).Distinct().ToArray();
DataTable pivot = new DataTable();
pivot.Columns.Add("R.N", typeof(int));
pivot.Columns.Add("Student Name", typeof(string));
foreach (string subject in subjects)
{
pivot.Columns.Add(subject, typeof(int));
}
var groups = dt.AsEnumerable().GroupBy(x => x.Field<int>("R.N"));
foreach (var group in groups)
{
DataRow newRow = pivot.Rows.Add();
newRow["R.N"] = group.FirstOrDefault().Field<int>("R.N");
newRow["Student Name"] = group.FirstOrDefault().Field<string>("Student Name");
foreach (var col in group)
{
newRow[col.Field<string>("Subjects")] = col.Field<int>("Marks");
}
}
}
}
}
你有试过什么吗?如果您在数据库中查看数据透视表,如果您想要一个linq解决方案,您可以尝试按 –
进行分组。为什么要改为图片?比以前更容易阅读 –
在SQL中使用数据透视表 – Sparrow