2

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)を追加するにはどうすればよいですか?

4

1 に答える 1

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);

ここでの文字列による順序付けは、値がすべて1桁でない限り、おそらく希望どおりに機能しないことに注意してください。本当にchannel3、channel2、channel10、channel1が必要ですか?

ただし、これはかなり奇妙なクエリです。特に、結合で最初のテーブルの何も使用されていないためです...

于 2012-10-23T06:00:07.040 に答える