3

簡単な問題がありますが、ここまたは MSDN で見つけた例を理解できません。(私はまだC#とすべてのデータセット関数に不慣れです)。

列が「建物」、「アパート」、「部屋」であるデータテーブル「tblR​​oom」があり、それらはすべてintであり、テーブルの主キーです(これはアパートの弱いエンティティです(建物の弱いエンティティです))プロパティ/列)。

DataRow[] roomCollection次のコードを使用して、建物内の特定のアパートを選択することもできます。

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

これはすべてうまくいきます(私は推測します...)。今、このアパートから部屋の最大値(このアパートの最大部屋数)を取得したいと考えています。私はこれらのコードを無駄にしようとしました:

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

ツールチップから、関数に何を書くべきかわかりません。no IEnumerable または Icomparable で例外をスローします。

部屋の列の最大値 (int) を取得するには、何を書く必要がありますか? エラー/ツールチップの意味が理解できないので、馬鹿に説明する「ダミーのための[何か]」を誰もが知っていますMax().

編集:ツールチップは、これらを入力することを提案しています(関連するものを示しています):

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

私は本当にそれを取得しません:(

よろしくお願いします、シェイ。

4

3 に答える 3

3

試す

int roomno = roomCollection.Max (r => (int) r["room"]);
于 2011-07-30T18:35:26.110 に答える
1

この場合、セレクターを渡して、Max()最大化する列を適切に識別する必要があります。

int max = roomCollection.Max(dr => (int)dr["room"]);
于 2011-07-30T18:34:53.440 に答える
1

roomCollection は DataRow の配列であるため、roomCollection DataRow dr = roomCollection.Max();から最大の DataRow を選択することを意味します。しかし、DataRow が別の DataRow よりも大きいとはどういう意味でしょうか? 一般に、有用な比較はありません。そのため、.Max()失敗します。

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

あなたがする必要があるのは、セレクター関数を渡して、Max()探している最大値を伝えることです。したがって、他の回答が示すように、使用する必要があります:

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

これは、DataRow ごとに部屋の整数値を選択し、部屋の最大値を取得することを意味します。

この.Max()関数は、.NET 3.5 で追加されたLinq (Language Integration Query) の一部です。したがって、何が起こっているのかをよりよく理解するために、それを読む必要があります。101 Linq Samplesは、あなたがやりたいことのほとんどすべての例を示しているので、役に立つことがわかりました。

于 2011-07-30T18:48:59.190 に答える