2011-07-30 48 views
3

私は単純な問題を抱えていますが、ここやMSDNのサンプルを理解できていません。 (私はまだC#とすべてのデータセット関数の新機能です)。datarow []内の列の最大値を見つける方法?

私は、その列が "建物"、 "アパート"、 "部屋"のデータテーブル "tblRoom"を持っています。それらはすべてintとテーブルのプライマリキーです(弱いエンティティです他のプロパティ/列なし)。

私もこのコードの建物の中に、特定のアパートを選択DataRow[] roomCollectionを持っている:

roomCollection = dbDataSet.tblRoom.Select("building ='"+ b_int + 
              "' and apartment='"+ a_int + "'"); 

このすべてが正常に動作(私は推測します...)。 今、このアパートからの部屋の最大値(このアパートメントの最大の部屋番号)を取得したいと思います。 私は無駄にこれらのコードを試してみた:

DataRow dr = roomCollection.Max(); 
int maxi = roomCollection.Max(); 

私はちょうど私が機能して書くこととしていますどのようなツールチップから得ることはありません。 IEnumerableまたはIcomparableのいずれにも例外をスローします。

部屋の列に最大値(int)を得るには何が必要ですか?私がMax()に書き込むと思われるもののエラー/ツールチップの意味を理解していないので、誰でも "ダミーのためのもの"を知っている人はそれを馬鹿に説明します。

EDIT: ツールチップは、これらの(示さrelevants)を入力することをお勧め:

(this IEnumerable <DataRow> source):DataRow 
(this IEnumerable <DataRow> source, Func<DataRow,int?> selector):int? 
(this IEnumerable <DataRow> source, Func<DataRow,int> selector):int 

私は本当にそれを取得しないでください:(先行

おかげで、 シェイこの中

答えて

3

はroomCollectionがでDataRowの配列であるので

int roomno = roomCollection.Max (r => (int) r["room"]); 
+0

ああ、それは動作します!本当にありがとう。私は2つの少し質問があります: 1.その構文はLINQですか? 2.それはどういう意味ですか? var "r"は["room"]から(キャストint)ですか? この知識を他の問題にどのように渡すのか本当に分かりません。なぜrが=の左のオペランドで、その右側が列名の近くにあるのですか? –

+1

シンタックスはdelegateを持つlinqです... rはデリゲートの最初のパラメータで、DataRow型(DataRowCollectionのrommCollectionから来ているため)で、after =>はMaxによって使用された値を表すデリゲートの本体です拡張メソッドを評価する... – Yahia

1

。あなたが最大にしたい列を適切に識別するためにセレクタをMax()に渡す場合。

int max = roomCollection.Max(dr => (int)dr["room"]); 
+0

ハは機能します。本当にありがとう。 –

1

を試し、DataRow dr = roomCollection.Max();手段はroomCollectionから最大のDataRowを選択します。しかし、DataRowが別のDataRowよりも大きくなるとはどういう意味ですか?一般的に有用な比較はないので、.Max()が失敗するのはなぜですか。

技術的にDataRowはIComparableを実装していません。なぜなら、2つのDataRowを比較し、どちらが「より大きい」か「より小さい」かを一般的に説明する理由があるからです。しかし、整数の場合、2は1より大きいからです。

セレクター関数をMax()に渡して、探している最大値を教えてください。だから、あなたが使用する必要がある他の回答の指標として:

int max = roomCollection.Max(dr => (int)dr["room"]); 

これは、各部屋に整数値を選択して、最大の部屋の値を取得するDataRowのために言います。

関数は、.NET 3.5で追加されたLinq(言語統合クエリ)の一部です。だから、何が起こっているのかをよく知るためには、そのことを読んでおく必要があります。私は101 Linq Samplesがあなたがやりたいと思うほぼすべての事例を示しているので便利だと分かっています。

+0

ありがとうございます!非常にありがとう。 :) –

関連する問題