如何从ViewModel中删除重复的行
查看模型:
public class ClientesPorEvento
{
public eventocliente eventocliente { get; set; }
public cliente cliente { get; set; }
public string NombreSubrecurso { get; set; }
public string NombreRecurso { get; set; }
public IEnumerable<precioventa> preciosventa { get; set; }
}
控制器左连接查询代码:
public ActionResult ClientesPorEvento(int idEvento)
{
//se hace un left join para que se autollenen las filas null donde las columnas tienen datos
IEnumerable<ClientesPorEvento> clientesPorEvento =
(from c in db.cliente
join ec in db.eventocliente on c.idCliente equals ec.idCliente
join pv in db.precioventa on ec.idVenta equals pv.idVenta into pventa
from pv in pventa.DefaultIfEmpty()
join rc in db.recursocliente on ec.idVenta equals rc.idVenta into recuc
from rc in recuc.DefaultIfEmpty()
join sr in db.subrecurso on rc.idSubrecurso equals sr.idSubrecurso into subre
from sr in subre.DefaultIfEmpty()
join r in db.recurso on sr.idRecurso equals r.idRecurso into recur
from r in recur.DefaultIfEmpty()
where ec.idEvento == idEvento
select new ClientesPorEvento {
preciosventa = pventa,
eventocliente = ec,
cliente = c,
NombreSubrecurso = sr.nombre == null ? "" : sr.nombre,
NombreRecurso = r.nombreRecurso == null ? "(No Reservas)" : r.nombreRecurso
}).OrderBy(m => m.eventocliente.nroReserva);
return PartialView(clientesPorEvento);
}
我不知道为什么它会给我重复行,只有当列有2个值时才会发生(&#34; preciosventa&#34;来自ViewModel),最后我尝试用groupby和hashSet删除重复行,没有成功。 非常感谢!!!
答案 0 :(得分:2)
我很确定你的评论中的分组是正确的并且会有效。但是你忘了实际从该分组中选择一些内容,这样你仍然可以将所有重复项 - 只是组合在一起:
var distinctClientsPerEvent = clientesPorEvento.GroupBy(m => m.cliente.nombreCliente)
.Select(x => x.FirstOrDefault());
您的分组包含一个或多个ClientsPorEvento
类型的对象(ClientsPerEvent?我的西班牙语不是最好的)。如果分组中有多个对象,则表示所有其他对象都是重复的。我们只选择第一个,并且将有一个重复的免费ViewModel。
还有一件事:正如我的评论中所述,我不会对可能会发生变化的事情进行分组,例如姓名。 Ids是永久性的,使用它们。 如果在您的示例中“Maria”订购了某些门票,与某人结婚,在系统中更改了她的名字并订购了更多门票,则您的分组将失败,因为她的名字已更改。 这是不太可能的,但最好是安全而不是抱歉。