7

単純に foreach ループを使用するのではなく、LINQ の側面を簡単に調べることにしましたが、主にデータ型が原因で、動作させるのに問題があります。

だから、これまでのところ、これを持っています。

var selectedSiteType = from sites in siteTypeList
                                   where sites.SiteTypeID == temp
                                   select sites;

siteTypeList は SiteType のリストです。特定のものを見つけようとしています(変数「temp」で非難しました。

この選択した SiteType を SiteType として使用するにはどうすればよいですか? 「selectedSiteType」を別の関数に渡そうとすると、次のようになります。

mSiteTypeSub.EditSitetype(selectedSiteType);

注:selectedSiteTypeがリスト/配列であるかのように、インデックスを提供しようとしましたが、どちらも機能しませんでした.次のエラーが発生します:

Argument 1: cannot convert from 
'System.Collections.Generic.IEnumerable<DeviceManager_take_2.SiteType>' to 
'DeviceManager_take_2.SiteType' 

何か不足していますか?おそらく何らかのキャスト?私が言ったように、私はこれに不慣れで、これを理解するのに苦労しています。コンセプト全体が間違っている可能性があり、ビンバンボッシュは自分をばかにしてしまったのです。

事前に乾杯。

4

3 に答える 3

17

First / FirstOrDefault / Single / SingleOrDefaultを使用して、コレクションから特定のタイプのアイテムを取得します。

   var value = selectedSiteType.First(); 
   // returns the first item of the collection

   var value = selectedSiteType.FirstOrDefault(); 
   // returns the first item of the collection or null if none exists

   var value = selectedSiteType.Single(); 
   // returns the only one item of the collection, exception is thrown if more then one exists

   var value = selectedSiteType.SingleOrDefault(); 
   // returns the only item from the collection or null, if none exists. If the collection contains more than one item, an exception is thrown. 
于 2012-09-18T12:53:52.157 に答える
7

戻り値の型が単一の場合:

   var selectedSiteType = (from sites in siteTypeList
                                       where sites.SiteTypeID == temp
                                       select sites).SingleOrDefault();

リスト (場合によっては複数のアイテム) の場合:

 var selectedSiteType = (from sites in siteTypeList
                                       where sites.SiteTypeID == temp
                                       select sites).ToList();

クエリに欠けているのは SingleOrDefault / ToList です。

于 2012-09-18T12:53:08.070 に答える
4

シェーン、

以前の回答を改善するつもりはありません。どちらも正しかった。私はあなたに少し説明しようと思いますので、あなたは将来それをもう少しよく理解するでしょう。

次のようなコードを書くとどうなりますか。

var selectedSiteType = from sites in siteTypeList
                               where sites.SiteTypeID == temp
                               select sites;

答えをvar(selectedSiteType)に入れないでください。代わりに、式ツリーを作成します。これは、実際に使用した場合(foreachで、またはメソッドの1つ(.First()など)を呼び出した場合にのみ評価されます。 、.ToList()、SingleOrDefault()など)。

fromステートメントのデフォルトの戻りタイプはIEnumerable<>ですが、.First()または.SingleOrDefault()(など)を呼び出すと、そのIEnumerable <>に飛び込んで、特定のアイテムを取得します。

これが何が起こっているのかをよりよく理解するのに役立つことを願っています。

Lemmeは、私が何かを追加できるかどうか、または何か問題があったかどうかを知っています。

乾杯、

マックス

于 2012-09-18T13:12:41.223 に答える