0

リポジトリ クラスをテストするためにモグラを作成しました。DefaultIfEmpty(new Drivers()) を配置すると機能しますが、プログラムを実行すると、次のエラーが表示されます。

しかし、それをDefaultIfEmpty()に戻すと、正常に動作しますが、私の *強いテキスト* ほくろテストは null 値を返すようになりました.ここに私のコードがあります:

 var result = from p in this.context.AirPositions
                         join a in this.context.Airplane p.airplane_id equals a.id
                         join s in this.context.Status on p.status_id equals s.id
                         join dp in this.context.DriversPositions on p.id equals dp.position_id into dpJoin
                         from ds in dpJoin.DefaultIfEmpty(new DriversPosition())
                         join d in this.context.Drivers on ds.driver_id equals d.id into dsJoin
                         from drs in dsJoin.DefaultIfEmpty(new Driver())
                         orderby p.timesent descending
                         select new PositionViewModel()
                         { ... };
4

2 に答える 2

0

linqプロバイダーは、デフォルト値をとるDefaultOrEmpty関数のオーバーロードをサポートしていないようです。

ほくろでこれをテストしたい場合は、コードを別の何かに書き直す必要があります。テストによってコードが変更されてはならないことはわかっています。SingleOrDefaultを使用してコードを書き直してみてください。

于 2012-11-14T08:33:41.990 に答える
0

Linq-to-Sql および Linq-to-Object で実行されるコードに問題があるようです。

私は次のようにそれを解決しました:

var result = from p in this.context.AirPositions
             join a in this.context.Airplane on p.asset_id equals a.id
             let driver = (from dd in this.context.DriversPositions.Where(u => u.position_id == p.id)
             join d in this.context.Drivers on dd.driver_id equals d.id
             select d).FirstOrDefault()
             orderby p.timesent descending
             select new PositionViewModel() {...}

これが他の人に役立つことを願っています:)

于 2013-01-29T09:38:26.077 に答える