假设我有一个DataTable对象,其中包含数据库中的数据,我需要重新组织它。我认为(根据我的研究)LINQ将是一种优雅(但速度快?)的方式。问题是如何。
数据来自数据库,格式如下
ORDER SAMPLE METHOD
1234 1 ASH-10
1234 1 ASH-11
1234 1 ASH-12
1234 2 ASH-10
1234 2 ASh-12
1234 5 ASH-10
1235 1 BSH-10
1235 1 BSH-11
1235 1 BSH-12
我需要将其重组为
ORDER SAMPLE ASH-10 ASH-11 ASH-12 BSH-10 BSH-11 BSH-12
1234 1 Y Y Y N N N
1234 2 Y N Y N N N
1234 5 Y N N N N N
1235 1 N N N N Y Y
如您所见,方法列将是动态的。当然,我可以使用旧式循环遍历数据,但似乎LINQ将是一种更好,更快的方法。如果我错了,请纠正我。
答案 0 :(得分:2)
DataTable非常适合从数据库中检索数据到您的应用程序中,但是一旦掌握了数据,通常最好将其转换为自定义对象。
您的初步设计可能如下所示:
class AllOrders
{
public static List<Order> Orders = new List<Order>();
public static List<Method> Methods = new List<Method>();
public static void ProcessTable(DataTable dt)
{
foreach (DataRow dr in dt.Rows)
{
int sampleId = Convert.ToInt32(dr["SAMPLE"]);
string methodName = Convert.ToString(dr["Method"]);
AddOrder(sampleId, methodName);
}
}
private static void AddOrder(int SampleId, string methodName)
{
Method m = Methods.FirstOrDefault(x => x.Name == methodName);
if (m == null)
{
m = new Method(methodName);
Methods.Add(m);
}
Order o = new Order(SampleId, m);
Orders.Add(o);
}
}
class Order
{
public Order(int sampleId, Method m)
{
this.Method = m;
this.SampleId = sampleId;
}
public int SampleId; //a more mature design might have a Sample class instead.
public Method Method;
}
class Method
{
public string Name;
public Method(string name)
{
this.Name = name;
}
}
答案 1 :(得分:1)
我最终使用循环来迭代和排序数据。填充对象的方法在这里有点多余 - 它是一个Web服务,所以我需要的是对数据进行排序并返回它。所以我保持简单。
答案 2 :(得分:0)
在这种情况下最好使用Dynamic Pivoting(SQL SERVER 2005)。