代码之家  ›  专栏  ›  技术社区  ›  Rarm

linq query在keyvaluepair<string,string>列表中存储值,但不能使用addrange存储所有值

  •  0
  • Rarm  · 技术社区  · 6 年前

    下面的linq查询获取所有站点的所有参数,每个站点(x.station)都有x个参数(x.parameters),我需要所有这些参数用于“result”和“values”。一开始可能有点混乱,因为这行:

     from x in selection.Parameters
    

    表示x个工作站,而不是x个参数。

    LINQ查询:

            var selectionData = 
                from x in selection.Parameters
                select new
                {
                    Result = "(p.col_IdEstacion = " + x.Station + " and p.col_Sigla in(" +
                                ("'" + string.Join("','", x.Parameters) + "'") + "))",
                    Values = 
                    (
                        from y in x.Parameters
                        select new KeyValuePair<string, string>(
                            x.Station.ToString(), y)).ToList()
                };
    

    之所以这样做,是因为我想在稍后的keyvaluepair列表中将所有参数存储在“values”中存储的所有工作站中:

      List<KeyValuePair<string, string>>  myList
    

    更新的 :发现代码正在工作,我做错的是将“values”添加到列表中,可能是firstOrDefault()只接受第一个:

          values.AddRange(selectionData.Select(d => d.Values).FirstOrDefault());
    

    回答 :找到正确的方法来存储使用linq检索的所有值 选择许多 这样地:

    valores.addrange(selectiondata.selectmany(d=>d.values))选项)

    谢谢

    2 回复  |  直到 6 年前
        1
  •  1
  •   Dom84    6 年前

    你可以试试 ToDictionary 相反

    但由于我不讲这种LINQ,我只使用方法链接,我不确定这是否会编译,但也许这是一个提示,告诉你该尝试什么。

    var selectionData = 
                from x in selection.Parameters
                select new
                {
                    Result = "(p.col_IdEstacion = " + x.Station + " and p.col_Sigla in(" +
                                ("'" + string.Join("','", x.Parameters) + "'") + "))",
                    Values = x.Parameters.ToDictionary(k=>k.Station.ToString(), v=>v)
                };
    
        2
  •  0
  •   Rarm    6 年前

    回答 :找到正确的方法来存储使用linq检索的所有值 选择许多 这样地:

    valores.addrange(selectiondata.selectmany(d=>d.values))选项)