C#linq查询数据表采取方法

时间:2012-10-23 05:58:25

标签: c# linq datatable

我无法从linq查询下面调用take方法

var data = from tb in table.AsEnumerable()
           join ch in channelTable.AsEnumerable() on syskey equals (DateTime)ch["syskey"]
           orderby Convert.ToDouble(tb[(string.Format("Channel{0}_data",Convert.ToInt32(ch["Channel_No"])))]) descending                       
           select new
           {
               Channel_No = ch["Channel_No"],
               Channel_data = tb[string.Format("Channel{0}_data", Convert.ToInt32(ch["Channel_No"]))],
           };

如何从linq查询中添加Take(5)?

1 个答案:

答案 0 :(得分:4)

简单地说:

var top5 = data.Take(5);

可以在同一个声明中做到这一点,但它有点难看:

var data = (from tb in table.AsEnumerable()
            join ch in channelTable.AsEnumerable() on syskey equals (DateTime)ch["syskey"]
            orderby Convert.ToDouble(tb[(string.Format("Channel{0}_data",Convert.ToInt32(ch["Channel_No"])))]) descending                       
            select new
            {
                Channel_No = ch["Channel_No"],
                Channel_data = tb[string.Format("Channel{0}_data", Convert.ToInt32(ch["Channel_No"]))],
            }).Take(5);

请注意,在这里按字符串排序可能不会达到你想要的效果,除非你的值都是单个数字 - 你真的想要channel3,channel2,channel10,channel1吗?

这是一个非常奇怪的查询 - 特别是因为你的连接不使用第一个表中的任何内容......