0

我做了一个痣来测试我的存储库类,当我输入 DefaultIfEmpty(new Drivers()) 时它可以工作,但是当我运行程序时,我收到这个错误:查询运算符“DefaultIfEmpty”使用不支持的重载。

但是当我把它放回DefaultIfEmpty()时,它工作正常,但我的*强文本*痣测试现在返回一个空值。这是我的代码:

 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 函数的重载,该函数采用默认值。

如果你想用 moles 测试它,你必须将你的代码重写为其他东西。我知道测试不应该改变你的代码。尝试使用 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 回答