Linq与多个foreach将项目插入表

时间:2019-04-19 20:32:41

标签: c# linq lambda

我下面有这样的ID列表

       List<int> ids = new List<int>();

然后我有一个长度列表,它也是下面这样的整数。

       List<int> lengths = new List<int>();

现在我需要使用linq查询以如下所示的数据格式插入表中

         ID  length
          1    1
          1    2
          1    3
          2    1
          2    2
          2    3

为此,我这样做

     foreach (var item in ids)
     {
             foreach (var item in lengths)
             {

              }

       }

使用上述方法,我无法在表中插入多个ID。我希望应该有更好的方法来执行此操作。 任何人都可以提出关于这个想法的任何想法,这对我非常感激。

谢谢。

2 个答案:

答案 0 :(得分:3)

如果您想使用 LINQ 将这两个列表投影到扁平列表中,则可以使用SelectMany

  

将序列的每个元素投影到IEnumerable并展平   产生的序列变成一个序列。

// projecting to an anonymous type 

var results = ids.SelectMany(id => lengths.Select(length => new {id, length }));

// or projecting to a value tuple

var results = ids.SelectMany(id => lengths.Select(length => (id, length)));

答案 1 :(得分:0)

如果您确实想要一个循环,则可以循环遍历最终结果的长度,并将索引计算到每个List中:

var idsCount = ids.Count;
var lengthsCount = lengths.Count;
var totalCount = idsCount * lengthsCount;
for (int j1 = 0; j1 < totalCount; ++j1) {
    var id = ids[j1 / lengthsCount];
    var length = lengths[j1 % lengthsCount];
    new { id, length }.Dump();
    // insert id,length
}