我正在尝试使用where,group by和select同时创建linq,但我无法做到这一点,并且总是抛出异常。
我该如何运作?
林克
public ActionResult getParceiros(){
//return all partners
IList<ViewParceirosModel> lista = new List<ViewParceirosModel>();
lista = context.usuarios.Where(u => u.perfil == RoleType.Parceiro)
.Select(x => new ViewParceirosModel
{
id = x.id,
nomeParceiro = x.nome,
emailAcesso = x.email
})
.GroupBy(x => x.id)
.OrderBy(x => x.nomeParceiro)
.ToList();
return View(lista);
}
例外
您的程序无法执行您想要的操作。las,您忘了告诉您您想要什么,您只向我们展示了您不需要的东西。我们不得不猜测。
因此,您有一系列的Usarios。
IQueryable<Usario> usarios = ...
我不需要知道Usario是什么,我只需要知道它具有某些属性即可。
您的第一步是使用Where丢弃一些Usarios :您只想保留Perfil等于RoleType.Parceirdo的这些usarios:
// keep only the Usarios with the Perfil equal to RoleType.Parceirdo:
var result = usarios.Where(usario => usario.Perfil == RoleType.Parceirdo)
换句话说:从Usarios的序列中,仅保留Perfil等于RoleTyoe.Parceirdo的那些Usarios。
结果是Usarios的子集,它是Usarios的序列。
在此结果的每个Usario中,您想要选择一些属性并将其放入一个ViewParceirosModel中:
var result = usarios.Where(usario => usario.Perfil == RoleType.Parceirdo)
.Select(usario => new ViewParceirosModel
{
Id = x.id,
NomeParceiro = x.nome,
EmailAcesso = x.email,
})
换句话说:从您在何处之后保存的每个Usario中,获取ID,Nome和Email以创建一个新的ViewParceirosModel。
结果是一系列ViewParceirosModels。如果添加ToList(),则可以将结果分配给变量列表。
但是您的GroupBy破坏了乐趣
我不知道您打算做什么,但是您的GroupBy将您的ViewParceirosModels序列更改为“一组ViewParceirosModels”序列。一组中的每个ViewParceirosModel都有相同的ID,该ID的值在键中。
因此,如果在GroupBy之后有一组Key == 1的ViewParceirosModel,那么您知道该组中的每个ViewParceirosModel的Id都等于1。
同样,键为17的组中的所有ViewParceirosModel的Id都等于17。
我认为ID是您的主键,因此每个组中只有一个元素。组1将拥有唯一的Id == 1的ViewParceirosModel,组17将拥有唯一的Id == 17的ViewParceirosModel。
如果Id是唯一的,则GroupBy是无用的。
在GroupBy之后,您要按顺序递增NomeParceiro的ViewParceirosModels序列。
需求
我有一系列的Usarios。我只想让这些Usarios的Perfil值等于RoleType.Parceirdo。在其余的Usarios中,我想使用Id / Nome / Email属性的值制作ViewParceirosModels。ViewParceirosModels的其余序列应由NomeParceiro排序,并将结果放入列表中。
List<ViewParceirosModel> viewParceiroModels = Usarios
.Where(usario => usario.Perfil == RoleType.Parceirdo)
.Select(usario => new ViewParceirosModel
{
Id = x.id,
NomeParceiro = x.nome,
EmailAcesso = x.email,
}
.OrderBy(viewParceirosModel => viewParceirosModel.NomeParceiro)
.ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句