【发布时间】:2019-09-30 13:45:26
【问题描述】:
我有这样的表达方式:
var query = from inventar in _context.Inventar
join inventarsoba in _context.InventarSoba.Where(x => x.SobaId == request.SobaId)
on inventar.InventarId equals inventarsoba.InventarId
select new { inventar, inventarsoba.InventarSobaId };
这基本上让我得到了所有“Inventar”记录的列表,其 id 也位于“InventarSoba”表中。最终结果是一个匿名类型列表,其中包含一个“Inventar”类型对象和一个 InventarSobaId 整数,都在一个元素中。
我基本上是在尝试将所有这些存储在一个名为 InventarModel 的类中,该类具有我想要发回的 InventarSobaId 和 Inventar 字段。但是,当我运行此代码时:
List<InventarModel> Lista = new List<InventarModel>();
if (query.Count() > 0)
{
InventarModel obj;
for (int i = 0; i < query.Count(); i++)
{
var obj2 = query.ElementAt(i);
obj = new InventarModel
{
InventarId = obj2.inventar.InventarId,
Naziv = obj2.inventar.Naziv,
SobaId = request.SobaId,
InventarSobaId = obj2.InventarSobaId
};
Lista.Add(obj);
}
}
return Lista;
它说不支持 ElementAt(i),它无法使用 ElementAt 方法解析值,并且尝试使用 [] 对其进行索引根本不起作用。请注意,当我使用“First”函数时,它工作正常,“obj”变量正确获取第一行的数据,但我无法使其与索引一起使用。 p>
简单地说,我正在尝试从查询中获取数据并将其全部存储在一个类中,该类将有一个 List,但我不知道该怎么做。
以防万一,Inventar 和 InventarModel 类如下所示:
发明者
public partial class Inventar
{
public Inventar()
{
InventarSoba = new HashSet<InventarSoba>();
}
public int InventarId { get; set; }
public string Naziv { get; set; }
public virtual ICollection<InventarSoba> InventarSoba { get; set; }
}
InventarModel
public class InventarModel
{
public int InventarId { get; set; }
public string Naziv { get; set; }
public int SobaId { get; set; }
public int InventarSobaId { get; set; }
}
【问题讨论】:
-
它不适用于索引。您想要
foreach (var obj2 in query) {...}——但使用循环变量的描述性名称而不是obj2。 -
添加
.ToList()以创建项目列表。然后你就有了完整的列表,并且可以通过索引访问元素。 -
在 LINQ to SQL 中未翻译 (stackoverflow.com/questions/5147767/…)
-
谢谢,当我使用 foreach 语句时它工作了
-
您正在迭代两次。为什么不将查询与 InventarModel 的创建结合起来,让它迭代一次?
标签: c# entity-framework linq