通过索引从IQueryable <anonymous>列表中获取元素

时间:2019-09-30 13:45:26

标签: c# entity-framework linq

我有这个表情:

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方法解析值,并且尝试使用[]对其进行索引完全无效。请注意,当我使用“第一”功能时,它与变量可以很好地工作,可以正确地获取第一行的数据,但是我无法使其与索引一起使用。

简而言之,我正在尝试从查询中获取数据并将其全部存储在一个具有列表的类中,我不知道该怎么做。

只要需要,这就是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; }
}

2 个答案:

答案 0 :(得分:1)

 List<InventarModel> Lista = 
         (from inventar in _context.Inventar
          join inventarsoba in _context.InventarSoba.Where(x => x.SobaId == request.SobaId)
          on inventar.InventarId equals inventarsoba.InventarId
          select new InventarModel()
          {
             //Assign values here from the inventarsoba and inventar
             InventarId = inventar.InventarId,
             Naziv = inventar.Naziv,
             SobaId = request.SobaId,
             InventarSobaId = inventarsoba.InventarSobaId
          }).ToList();

答案 1 :(得分:0)

谢谢大家,把foreach而不是for做到了。

但是,有人建议我只做一次迭代,然后在末尾添加到列表中,这就像一个符咒,这是我最后的方法:

public override List<InventarModel> Get(InventarSearchRequest request)
{

    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 InventarModel()
                 {
                     InventarId = inventar.InventarId,
                     Naziv = inventar.Naziv,
                     SobaId = request.SobaId,
                     InventarSobaId = inventarsoba.InventarSobaId
                 }).ToList();

    return query;
}
相关问题