使用foreach循环和选择语句创建多个数组

使用foreach循环和选择语句创建多个数组

问题描述:

我有一个数据库,我打电话选择它的表中的所有内容。它有18000+项目。我有一个方法使用一个Web服务,它可以有一个最多10个元素的数组传入它。现在我正在逐项而不是数组。我想创建一个十的数组,然后调用该函数。我可以创建一个十个数组,然后调用函数是什么我有一个额外的三个记录?使用foreach循环和选择语句创建多个数组

public static void Main() 
{ 
    inventoryBLL inv = new inventoryBLL(); 
    DataSet1.sDataTable dtsku = inv.SelectEverything(); 
    foreach (DataSet1.Row row in dtsku) 
    { 
     webservicefunction(row.item); 
    } 
} 

我的问题是我将如何改变这一点?

您的问题

通用的解决方案看起来是这样的:

static class LinqHelper 
{ 
    public static IEnumerable<T[]> SplitIntoGroups<T>(this IEnumerable<T> items, int N) 
    { 
     if (items == null || N < 1) 
      yield break; 

     T[] group = new T[N]; 
     int size = 0; 
     var iter = items.GetEnumerator(); 

     while (iter.MoveNext()) 
     { 
      group[size++] = iter.Current; 
      if (size == N) 
      { 
       yield return group; 
       size = 0; 
       group = new T[N]; 
      } 
     } 
     if (size > 0) 
      yield return group.Take(size).ToArray(); 
    } 
} 

所以你Main功能成为

public static void Main() 
{ 
    inventoryBLL inv = new inventoryBLL(); 
    DataSet1.sDataTable dtsku = inv.SelectEverything(); 
    foreach (var items in dtsku.Select(r => r.item).SplitIntoGroups(10)) 
    { 
     webservicefunction(items); 
    } 
} 
+0

我得到两个错误1无法将lambda扩展转换为键入'string',因为它不是委托类型,2不包含'item'。 –

+0

请详细了解您的代码。至少要提供'DataSet1.sDataTable'和'DataSet1.Row'类声明和'webservicefunction'的确切签名。否则很难说为什么你有这样的错误。 –

var taken = 0; 
var takecount = 10; 
while(list.Count() >= taken) 
{ 
    callWebService(list.Skip(taken).Take(takecount)); 
    taken += takecount; 
} 

通用扩展方法版本:

public static void AtATime<T>(this IEnumerable<T> list, int eachTime, Action<IEnumerable<T>> action) 
{ 
     var taken = 0; 
     while(list.Count() >= taken) 
     { 
      action(list.Skip(taken).Take(eachTime)); 
      taken += eachTime;  
     } 
} 

用法:

inv.SelectEverything().AtATime<Row>(10, webservicefunction); 
+0

这真是令人困惑,因为它看起来真空。 –

+0

我不明白你的评论。提供的代码(伪代码?)将会列出​​一个列表,当有项目需要处理时,它会一次发送10个代码来调用WebService。这不是你想要的吗? – rtalbot

+0

这可以解决,但不是最优的:'skip'需要从每次调用的开始处开始,直到达到'被采用'。 – Magnus