Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按索引从IQueryable列表中获取元素_C#_Entity Framework_Linq - Fatal编程技术网

C# 按索引从IQueryable列表中获取元素

C# 按索引从IQueryable列表中获取元素,c#,entity-framework,linq,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

我有这样的表达:

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;

谢谢大家,用foreach而不是foreach做了这个把戏

然而,有人建议我只需在一次迭代中完成,并在最后添加到列表中,这就像一个符咒,下面是我最终的做法:

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;
}

它不是用来编制索引的。您希望在查询{…}中使用foreach var obj2,但使用循环变量的描述性名称而不是obj2.Add.ToList来创建项目列表。然后,您就有了完整的列表,可以通过索引访问元素。在LINQ to SQL中,它没有被转换,谢谢,当我刚刚使用foreach语句时,它起作用了。您正在迭代两次。为什么不将查询与InventarModel的创建结合起来,这样它将迭代一次呢?一些解释会很好。只有代码的答案对未来的读者没有什么价值。
public class InventarModel
{
    public int InventarId { get; set; }
    public string Naziv { get; set; }
    public int SobaId { get; set; }
    public int InventarSobaId { get; set; }
}
 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();
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;
}