我的第一个问题是:Linq lambda expression many to many table select
我使用服务器端的数据服务从客户端的db检索数据。我知道数据服务不支持分组。
呼叫客户端:
public List<Lottery> GetLotteriesByLotteryOfferId(int lotteryOfferId)
{
var query = this.ClientRepositories.BackOfficeData.CreateQuery<Lottery>("GetLotteriesByLotteryOfferId")
.AddQueryOption("lotteryOfferId", lotteryOfferId).ToList();
return query;
}我在服务器端的lambda查询不起作用:
public IQueryable<Lottery> GetLotteriesByLotteryOfferId(int lotteryOfferId)
{
return this.db.LotteryOffers
.Where(lo => lo.Id == lotteryOfferId)
.SelectMany(lo => lo.LotteryDrawDates)
.Select(ldd => ldd.Lottery)
.GroupBy(s => new { s.Name, s.CreatedBy, s.ModifiedOn, s.Id })
.Select(g => new Lottery
{
Name = g.Key.Name,
CreatedBy = g.Key.CreatedBy,
ModifiedOn = g.Key.ModifiedOn,
Id = g.Key.Id
});
}这里我得到了一个错误:
无法在LINQ实体查询中构造实体或复杂类型的“彩票”。
我能理解,因为我的团队。我的问题是如何在客户端实现这一点?因此,我在服务器端运行查询,直到彩票选择(没有分组部分)并在客户端逐个附加查询部分?
附加问题如果我想使用自定义视图模型,我只需在客户端创建它并选择" viewmodel“类型,而不是选择选项的彩票?
示例:
.Select(g => new CustomViewModel
{
CountRows = g.Count()
});发布于 2014-01-16 22:57:14
我认为错误在于您在选择器中使用了类彩票。LINQ只能构造pur“数据传输对象”:类只包含带有普通getter和setter的公共属性,并且没有构造函数。
class LotteryDTO
{
public string Name { get; set; }
public string CreatedBy { get; set; }
...
}
IQueryable<LotteryDTO> result = db.LotteryOffers
.Where(...)
.SelectMany(...)
.Select(...)
.GroupBy(...)
.Select(g => new LotteryDTO {
Name = g.Key.Name,
CreatedBy = g.Key.CreatedBy,
...
});发布于 2013-10-20 18:54:47
我认为这个错误是LINQ实体无法将其投影到自定义类中,您应该能够在投影之前添加AsEnumerable。
public IQueryable<Lottery> GetLotteriesByLotteryOfferId(int lotteryOfferId)
{
return this.db.LotteryOffers
.Where(lo => lo.Id == lotteryOfferId)
.SelectMany(lo => lo.LotteryDrawDates)
.Select(ldd => ldd.Lottery)
.GroupBy(s => new { s.Name, s.CreatedBy, s.ModifiedOn, s.Id })
.AsEnumerable()
.Select(g => new Lottery
{
Name = g.Key.Name,
CreatedBy = g.Key.CreatedBy,
ModifiedOn = g.Key.ModifiedOn,
Id = g.Key.Id
});
}我也认为你对viewModel的理解是正确的。
https://stackoverflow.com/questions/19476477
复制相似问题