2
var rooms = tblRoom
        .Where(r => r.hotel_id==1)
        .GroupBy(p => p.tblType)
        .Select(g => new
            {
            TypeName = g.Key.type_name,
            TypeID = g.Key.type_id,
            TypeCount = g.Count()
            });

            rooms.Dump();

LinqPad - これは正常に動作し、以下を返します: LinqPadスクリーンショット

ただし、これを Visual Studio に転送すると:

var rooms = dbr.Rooms
                .Where(r => r.hotel_id == 1)
                .GroupBy(p => p.type_id)
                .Select(g => new 
                {
                    TypeName = g.Key.type_name,
                    TypeID = g.Key.type_id,
                    TypeCount = g.Count()
                });

g.Key.type_name セクションに次のメッセージが表示されます。

**'long' には 'type_name' の定義が含まれておらず、型 'long' の最初の引数を受け入れる拡張メソッド 'type_name' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?) **

結果を次のビューモデルに追加しようとしています:

    public class RatesViewModel
    {
        public string TypeName { get; set; }
        public long TypeID { get; set; }
        public int TypeCount { get; set; }
    }

繰り返しますが、それは私が見逃している単純なものでなければなりません。そのため、結果をビューモデルに取り込む際の助けをいただければ幸いです。

ありがとう、マーク

4

3 に答える 3

3

結果を次のビューモデルに追加しようとしています:

コードでこのビューモデルにどのように関連しているかわかりません。リポジトリに単純にクエリを実行し、匿名オブジェクトを返しています。

ビュー モデルを返す場合は、クエリをこのビュー モデルに投影するように調整します。

var rooms = dbr
    .Rooms
    .Where(r => r.hotel_id == 1)
    .GroupBy(p => p.type_id)
    .Select(g => new RatesViewModel
    {
        TypeName = g.Key.type_name,
        TypeID = g.Key.type_id,
        TypeCount = g.Count()
    })
    .ToList();
return View(rooms);

これで、ビューは明らかにビュー モデルに強く型付けされます。

@model IEnumerable<RatesViewModel>
于 2012-08-16T13:04:53.137 に答える
1

GroupByLinqpadとVisualStudioの行を見てください。あなたはさまざまなものでグループ化しています。

最初はオブジェクトでグループ化していますが、2番目では番号でグループ化しています。はKeyグループ化されるオブジェクトであるため、番号でグループ化する場合、呼び出しg.key.type_nameは機能しません。

于 2012-08-16T13:08:57.397 に答える
1

2 つの問題があります。まず、LINQ クエリは匿名オブジェクトの列挙を作成しています。その問題を解決するには、クエリを変更してタイプを指定するだけです。

次は、クエリの結果をオブジェクトの列挙ではなく単一のオブジェクトに割り当てようとしていることです。その問題を解決するには、First()(またはSingle()、、FirstOrDefault()またはSingleOrDefault()依存する)に追加する必要があります。

.Select(g => new RatesViewModel
{
    TypeName = g.Key.type_name,
    TypeID = g.Key.type_id,
    TypeCount = g.Count()
}.First()
于 2012-08-16T13:05:37.447 に答える