【问题标题】:MVC linq keeps returning the last row of dataMVC linq 不断返回最后一行数据
【发布时间】:2020-01-29 02:22:24
【问题描述】:

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

我的班级是ProizvedeniProizvodiBO,其中包含三个班级(ProizvodBOProizvodjacBOProizvodnjaBO)。这些类都模仿表的结构。

代码如下:

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 基本上会转换为ProductProizvodjac 转换为producerProizvodnja 是连接它们的中间表格。 Proizvodnja 有 2 个主键(idProizvodaidProizvodjaca)。

有什么帮助吗?

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个如此明显的错误,该死的。我被难住了这么久。我不知道它是一个引用类型,这更有意义。我现在几乎累死了,但我会在早上试试。
    • 你成功了兄弟。
    猜你喜欢
    • 2022-09-25
    • 2018-10-29
    • 2022-07-15
    • 2016-02-11
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    相关资源
    最近更新 更多