4

エンティティフレームワークを使用して最初のMVC4アプリケーションを構築しようとしています。私が探しているのは、各オプションの値とテキストが同じ値に設定されたドロップダウンリストを作成することだけです。

これは、私がを投入するまでは機能しGroupBy()ます。

Create.cshtml

@Html.DropDownList("CustomerName",(SelectList)ViewData["companies"]);

ticketController.cs

ViewBag.companies = new SelectList(oc_db.company.Where(c => c.status == "ACTIVE")
                                                 .OrderBy(c => c.name_1)
                                                  .GroupBy(c=>c.name_1)
                                   , "name_1", "name_1");

これが私が受け取っているエラーです:

DataBinding:'System.Data.Objects.ELinq.InitializerMetadata + Grouping`2 [[System.String、mscorlib、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089]、[OpsTicketing.Models.company、OpsTicketing、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null]]'には、'name_1'という名前のプロパティが含まれていません。

クエリを使用しない場合、GroupBy重複はありますが、機能します。

4

4 に答える 4

5

GroupBy基になるタイプの列挙は提供されません。これにより、そのグループのキー値を提供するフィールドと、そのグループのメンバーを反復処理できるインターフェイスを備えIGroupingたオブジェクトの列挙が提供されます。KeyIEnumerable

一意の値のリストname_1だけが必要な場合は、そのフィールドを選択してからDistinctOrderByを実行します。

ViewBag.companies = new SelectList(oc_db.company.Where(c => c.status == "ACTIVE")
                                                .Select(c=> new {c.name_1})
                                                .Distinct()
                                                .OrderBy(c => c.name_1)
                                   , "name_1", "name_1");

がなくても実行できることに注意してください。ただし、クラス.Select()の「同等性」を定義する必要がありますcompany。これは、この演習の価値よりも厄介です。これが、Distinct以前は機能しなかった理由です。2つの会社を区別するものを定義していなかったためです。

于 2013-01-30T04:01:06.047 に答える
2

GroupByを実行する前にクエリを解決する必要があります。これは、.ToList()

于 2013-01-29T22:46:43.510 に答える
1

.Distinct()を使用するのはどうですか? http://msdn.microsoft.com/en-us/library/bb348436.aspx

これが必要なすべてである場合は機能するはずです。

于 2013-01-29T22:49:39.817 に答える
0

リストを区別するためだけにグループ化を使用していますか?もしそうなら、試してみてください:

.Where(c => c.status == "ACTIVE")
.OrderBy(c => c.name_1)
.Distinct()
于 2013-01-29T22:48:42.157 に答える