結果はDataTableの形式で設定されています。 データテーブルには、startTime
とendTime
の2つのフィールドがあります。 startTime
フィールドとendTime
フィールドの最大の違いを持つ行を取得する必要があります。DataTableでLinqを実装する方法
これはLinqを使って簡単に実装できると思いますが、データテーブルで同じことを行う方法はわかりません。
結果はDataTableの形式で設定されています。 データテーブルには、startTime
とendTime
の2つのフィールドがあります。 startTime
フィールドとendTime
フィールドの最大の違いを持つ行を取得する必要があります。DataTableでLinqを実装する方法
これはLinqを使って簡単に実装できると思いますが、データテーブルで同じことを行う方法はわかりません。
Linq To DataSetはあなたが探しているものです。
データテーブルでAsEnumerable()を呼び出すと、通常のLinqクエリを書き込むことができます。
しかし、ここで私は開始時間と終了時間の違いで最大操作を実行したいと思います。これはLinq –
@SumitGuptaはいによって可能です。私の答えを見てください。 –
DataTableの行をEndTime
フィールドとStartTime
フィールドの違いでソートし、上から1行目を選択することができます。
この例では、私は指定されたDataTableのうち、DataRowオブジェクトのシーケンスを取得するためにDataTableExtensions.AsEnumerable()メソッドを使用しています:
var rowWithLongestTimespan = (from row in dataTable.AsEnumerable()
let endTime = row.Field<DateTime>("EndTime")
let startTime = row.Field<DateTime>("StartTime")
orderby endTime - startTime descending
select row).First();
ここでorderbyは使用しません。ソートはO(n * log(n))であり、maxはO(n)である。 –
@ achitaka-san本当です。 IMHOこれは、 'endTime'と' startTime'の違いで行をグループ化し、その差が最高値のグループと等しい行を選択するなど、いくつかの選択肢よりも単純な解決策です。しかし、あなたが言うように、それはクエリに関係する行の数に応じて、パフォーマンスの問題を引き起こす可能性があります。 –
var maxDiff = dataTable
.AsEnumerable()
.Select(row => row.Field<DateTime>("endDate") - row.Field<DateTime>("startDate"))
.Max();
var allHavingMaxDiff = dataTable
.AsEnumerable()
.Where(row => row.Field<DateTime>("endDate") - row.Field<DateTime>("startDate") == maxDiff);
var oneHavingMaxDiff = allHavingMaxDiff.First();
は '' DataSet'に関連するDataTable'と、場合ですですから、 'DataSet'は強く型付けされていますか? –
そのデータテーブル。 –