首页 > 解决方案 > MVC linq 不断返回最后一行数据

问题描述

我正在尝试从 3 个组合表中获取一些数据。

我的班级ProizvedeniProizvodiBO由三个班级组成(ProizvodBO, ProizvodjacBO, ProizvodnjaBO)。这些类都模仿表的结构。

这是代码:

public IEnumerable<ProizvedeniProizvodiBO> NadjiProizvod(int idProizvoda)
{
            List<ProizvedeniProizvodiBO> lista = new List<ProizvedeniProizvodiBO>();
            Proizvod proizvod = azilEntities.Proizvods.FirstOrDefault(x => x.idProizvoda == idProizvoda);
            ProizvodBO trazeniProizvod = new ProizvodBO();
            ProizvodjacBO trazeniProizvodjac = new ProizvodjacBO();
            ProizvodnjaBO trazenaProizvodnja = new ProizvodnjaBO();
            ProizvedeniProizvodiBO noviProizvedeniProizvod = new ProizvedeniProizvodiBO();
            trazeniProizvod.IdProizvoda = proizvod.idProizvoda;
            trazeniProizvod.Kolicina = proizvod.kolicina;
            trazeniProizvod.NazivProizvoda = proizvod.nazivProizvoda;

            foreach (Proizvodnja proizvodnja in azilEntities.Proizvodnjas.Where(x => x.idProizvoda == idProizvoda))
            {
                trazenaProizvodnja.IdProizvoda = proizvodnja.idProizvoda;
                trazenaProizvodnja.IdProizvodjaca = proizvodnja.idProizvodjaca;
                trazenaProizvodnja.DostupneKolicine = proizvodnja.dostupneKolicine;

                Proizvodjac proizvodjac = azilEntities.Proizvodjacs.FirstOrDefault(x => x.idProizvodjaca == proizvodnja.idProizvodjaca);
                trazeniProizvodjac.IdProizvodjaca = proizvodjac.idProizvodjaca;
                trazeniProizvodjac.NazivProizvodjaca = proizvodjac.nazivProizvodjaca;
                trazeniProizvodjac.Grad = proizvodjac.grad;
                trazeniProizvodjac.Ulica = proizvodjac.ulica;
                noviProizvedeniProizvod.proizvod = trazeniProizvod;
                noviProizvedeniProizvod.proizvodjac = trazeniProizvodjac;
                noviProizvedeniProizvod.proizvodnja = trazenaProizvodnja;
                lista.Add(noviProizvedeniProizvod);
            }
            return lista;
}

它返回正确数量的行(假设有 3 种不同的组合),但它返回的每一行都是完全相同的,并且总是最后一行(我手动检查)。

我尝试在 SQL 中运行相关命令,它们可以正常工作。

我正在将数据转发到视图。

Proizvod基本上会转换为Product, Proizvodjactoproducer并且Proizvodnja是连接它们的中间表格。Proizvodnja有 2 个主键(idProizvodaidProizvodjaca)。

有什么帮助吗?

标签: c#asp.net-mvclinq

解决方案


您需要将对象的实例化移动到foreach循环中,然后一切都按预期工作,如下所示:

foreach (Proizvodnja proizvodnja in azilEntities.Proizvodnjas.Where(x => x.idProizvoda == idProizvoda))
{
    ProizvedeniProizvodiBO noviProizvedeniProizvod = new ProizvedeniProizvodiBO();  

原因是ProizvedeniProizvodiBO引用类型,所以实际上,当您在循环之外创建一个新对象,然后每次在循环中将值分配给新对象时,它将覆盖最后一个数据,因为它是一个引用类型。因此,您列表中的所有项目都指的是同一个对象。


推荐阅读