C# 基于数据服务的LINQ group by
我的第一个问题是: 我使用服务器端的数据服务从客户端的数据库检索数据。我知道数据服务不支持分组 客户电话:C# 基于数据服务的LINQ group by,c#,sql,linq,entity-framework,lambda,C#,Sql,Linq,Entity Framework,Lambda,我的第一个问题是: 我使用服务器端的数据服务从客户端的数据库检索数据。我知道数据服务不支持分组 客户电话: public List<Lottery> GetLotteriesByLotteryOfferId(int lotteryOfferId) { var query = this.ClientRepositories.BackOfficeData.CreateQuery<Lottery>("GetLotteriesByLotteryOfferId")
public List<Lottery> GetLotteriesByLotteryOfferId(int lotteryOfferId)
{
var query = this.ClientRepositories.BackOfficeData.CreateQuery<Lottery>("GetLotteriesByLotteryOfferId")
.AddQueryOption("lotteryOfferId", lotteryOfferId).ToList();
return query;
}
我认为错误在于LINQ to实体无法投影到自定义类中,您应该能够通过在投影之前添加一个numerable来实现
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
});
}
public IQueryable GetLotteriesByLotteryOfferId(int-lotteryOfferId)
{
返回此.db.LotteryOffers
.Where(lo=>lo.Id==lotteryOfferId)
.SelectMany(lo=>Lot.LotteryDrawDates)
.Select(ldd=>ldd.lotking)
.GroupBy(s=>new{s.Name,s.CreatedBy,s.ModifiedOn,s.Id})
.可计算的()
.选择(g=>新彩票
{
Name=g.Key.Name,
CreatedBy=g.Key.CreatedBy,
ModifiedOn=g.Key.ModifiedOn,
Id=g.Key.Id
});
}
我还认为您对viewModel的理解是正确的。我认为错误在于您在选择器中使用了类彩票。 LINQ to entity只能构造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,
...
});
class LotteryDTO
{
公共字符串名称{get;set;}
通过{get;set;}创建的公共字符串
...
}
IQueryable结果=db.LotteryOffers
.其中(…)
.SelectMany(…)
.选择(…)
.GroupBy(…)
.选择(g=>new LotteryDTO{
Name=g.Key.Name,
CreatedBy=g.Key.CreatedBy,
...
});
您所说的“客户端”是什么意思?在我的客户端(webapp)中,我使用方法调用服务方法。我将服务方法调用到服务器端:)
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
});
}
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,
...
});