1

この2つのトピックへのリンク:

クエリのLambda式をlinqバージョンに変換します

そのアイテムに関連するすべてのレコードに特定の条件があるアイテムを返す

最初のトピックで@xanatosは次のようにコメントしています:

@Kerezo新しい{r.City}エラーが2回(各クエリで1回)表示されることに注意してください。new {r.City}は、Cityオブジェクトを含むCityという単一のプロパティを持つ匿名オブジェクトを作成します(したがって、Cityをオブジェクトでラップします)。newがない場合は、Cityを直接使用できます。

このコードを検討してください:

var citiesToExclude = from r in ent.TestAllStatusEqualsOnes
                              where r.Status != 1
                              select r.City;

GridView1.DataSource = citiesToExclude;
GridView1.DataBind();

このコードをこのように書いた場合:

var citiesToExclude = from r in ent.TestAllStatusEqualsOnes
                              where r.Status != 1
                              select new { r.City };

GridView1.DataSource = citiesToExclude;
GridView1.DataBind();

すべてが平等です。

select r.Fieldとの違いがわかりませんselect new {r.Field}。誰かがもっと説明できますか?

ありがとう

4

3 に答える 3

3

匿名型は、他の型とほとんど同じですそう:

select new { r.City }

以下とほとんど同じです:

select new SomeType { City = r.City}

と:

class SomeType { public string City {get;set;} }

これにより、おそらく区別が簡単になります。次の違いと同じです。

string x = obj.City;

SomeType y = new SomeType { City = obj.City };

場合によっては、取得しているのは都市名です。それ以外の場合は、都市名であるというプロパティを持つオブジェクトを取得しいます (ただし、一般的なケースでは、他のプロパティも持つことができます) City

LINQ 内でも同じロジックが適用されます。

2 つの便利な違いの 1 つはnull、たとえば次のように考慮することです。

var city = {some query}.FirstOrDefault();

実際の都市名を選択している場合、「行なし」と「都市名が null の行」の違いを見分けるのは少し難しいです。オブジェクトを選択している場合は、 obj == nullvsの間で区別できますobj.City == null

于 2012-07-17T10:22:36.023 に答える
2

1 - r.Field を選択 - 既存のタイプを返します (例: r.Field = 文字列)

2 - 新しい {r.Field} を選択 - 新しい匿名型オブジェクトを返します。

疑いが晴れることを願っています。

于 2012-07-17T10:18:47.583 に答える
2

このnew { Property = value }構文は、匿名型を作成するためのものです(読み取り専用プロパティを持つ参照型と、等価性と型の再利用をサポートするバッキング)。

違いは、最初のステートメントがIEnumerable<City Type>2 番目のステートメントを返すことIEnumerable<anonymous type>です。匿名型には、 type という名前のプロパティがありCityますCity Type。プロパティ名が次のように指定されていない場合:

new { City = r.City }; // Explicitly-named property called City.

匿名型は、次のように使用されるプロパティの名前を取ります。

new { r.City }; // Property called City.

匿名型が名前を解決できない場合:

new { "a string" };

コンパイル エラーが発生します。

匿名型は、別の拡張メソッドまたは linq ステートメントの別の部分に伝播するためのインライン コンテナーを構築するのに役立ちます。

匿名型をクラス メンバーとして宣言することはできずvar、それらを十分に活用するには使用する必要があります。IntelliSense サポートがあります。また、インターフェイス定義を満たさず、プロパティのみを含めることができます。

于 2012-07-17T10:22:14.463 に答える