如何设置列表对象c#

时间:2018-08-17 20:49:45

标签: c# linq

我正在使用两个列表作为控制器上的方法参数,但是现在我遇到了问题...例如,我有第一个包含三个对象的列表,第二个包含三个对象的列表。知道吧,我只是想从第一个列表中获取每个对象,从第二个列表中获取对应的对象..例如[0]-[0]; [1]-[1]; [2]-[2] ...

我使用两个foreach来迭代每个列表,但是问题出在我从Turno列表转到第二个对象之后,因为在此之后,当我开始DocenteId List的迭代时,迭代从[0]对象开始,但实际上我不想让DocenteId的第一个对象再次出现,但是第二个...

我拥有的if子句只是因为我无法重复Turno列表对象附带的TurnoId值...当DocenteId列表带有相同的值(如object [0] -1; object [ 1] -1;对象[1] -2;我希望发生这种情况,但我只想在turnodocente列表上获得三个值,所以这是我只能切换Turno对象而不是DocenteId对象的问题。我的方法现在发生的情况是结果带有三个值,但是foreach Turno对象我总是得到DocenteId列表的第一个对象值,我不想要那个。...

存在某种获取方式吗?

我会很感激您的帮助...

控制器方法

foreach (var item in Turno)
{
    foreach (var ite in DocenteId)
    {
        if (!turnodocente.Any(x =>x.TurnoId == item.TurnoId))
        {
            turnodocente.Add(new TurnoDocente
            {
                TurnoId = item.TurnoId,
                DocenteId = ite
            });                             
        }
    }
}

3 个答案:

答案 0 :(得分:0)

我不知道我是否完全理解您的问题,但是,如果两个列表的对象数相同,我认为解决方案可能是这样的:

for(int i=0; i<Turno.Count(); i++)
{
    turnodocente.Add(new TurnoDocente
        {
            TurnoId = Turno[i],
            DocenteId = DocenteId[i]
        });  
}

让我知道它是否对您有帮助。

编辑:我只是想解释一下可能会很好。在另一个foreach中使用foreach时,索引的迭代如下所示: 0-0、0-1、0-2 ... 1-0、1-1、1-2 ...等,因此基本上存在一个*迭代。您只需要在两个列表中进行一次迭代,因此“ for”循环是一个不错的选择,因为您将从两个具有相同索引的列表中获取对象。我希望它很聪明:)

答案 1 :(得分:0)

考虑到两个列表中的对象数量相同;

   var Turno = new List<int>() {1000, 2000, 3000};
        var DocenteId = new List<int> {5000, 6000, 7000};

        var turnodocente = new List<KeyValuePair<int, int>>();

        for (int i = 0; i < Turno.Count; i++)
        {
            if (turnodocente.All(x => x.Key != Turno[i]))
            {
                turnodocente.Add(new KeyValuePair<int, int>(Turno[i], DocenteId[i]));
                Console.WriteLine(turnodocente[i].Key +" " + turnodocente[i].Value);
            }
        }

答案 2 :(得分:0)

听起来像您可能需要Enumerable.Zip

  async sqlExecute(sql,params = {}){
    try{
      return await this.db.executeSql(sql,params);
    }catch(err){
      return Promise.reject(err);
    }
  }