首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对DataTable对象执行LINQ查询

对DataTable对象执行LINQ查询
EN

Stack Overflow用户
提问于 2010-12-22 08:56:54
回答 3查看 278关注 0票数 0

假设我有一个包含来自数据库的数据的DataTable对象,我需要重新组织它。我认为(根据我的研究) LINQ将是一个优雅的(但它快吗?)这样做的方式。问题是如何实现。

数据来自数据库,格式如下

代码语言:javascript
复制
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

我需要把它重新洗牌成

代码语言:javascript
复制
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似乎是一种更好、更快的方法。如果我错了,请纠正我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-22 09:00:21

DataTable非常适合将数据从数据库检索到您的应用程序中,但是一旦您拥有了数据,最好将其转换为自定义对象。

您的初步设计可能如下所示:

代码语言:javascript
复制
 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;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2010-12-23 02:06:31

我最终使用了一个循环来迭代和排序数据。填充对象的方法在这里有点多余-它是一个web服务,所以我所需要的就是对数据进行排序并返回它。所以我让它变得简单。

票数 1
EN

Stack Overflow用户

发布于 2010-12-22 12:30:21

在这种情况下,最好使用Dynamic Pivoting (SQL Server2005)。

Oracle11g支持Pivoting。对于较低的版本,你可以看看thisthis,甚至在谷歌上搜索也会产生很多示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4505335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档