c# - 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
, Proizvodjac
toproducer
并且Proizvodnja
是连接它们的中间表格。Proizvodnja
有 2 个主键(idProizvoda
和idProizvodjaca
)。
有什么帮助吗?
解决方案
您需要将对象的实例化移动到foreach
循环中,然后一切都按预期工作,如下所示:
foreach (Proizvodnja proizvodnja in azilEntities.Proizvodnjas.Where(x => x.idProizvoda == idProizvoda))
{
ProizvedeniProizvodiBO noviProizvedeniProizvod = new ProizvedeniProizvodiBO();
原因是ProizvedeniProizvodiBO
引用类型,所以实际上,当您在循环之外创建一个新对象,然后每次在循环中将值分配给新对象时,它将覆盖最后一个数据,因为它是一个引用类型。因此,您列表中的所有项目都指的是同一个对象。
推荐阅读
- algorithm - 寻找复杂性的下限和上限
- firebase - 每个设备和消息的 fcm 配额和限制
- javascript - 正则表达式在句子中定义捕获的组
- javascript - 根据从选择框中选择的值过滤特定的表列
- rest - 你什么时候说 Web 服务是一个完整的 RestFul Web 服务?
- php - __set_state() - php.net 上注释的解释
- java - 为什么每次在同一部手机上id都会改变?Firebase 数据库
- arrays - 如何将哈希表导入 PowerShell 以匹配现有格式
- java - 如何在没有注释的情况下在 Spring 核心中初始化 MongoClient 时注入 Mongo 选项?
- javascript - Plotly.js 创建堆叠和分组条形图