使用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);
}
}
答
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);
我得到两个错误1无法将lambda扩展转换为键入'string',因为它不是委托类型,2不包含'item'。 –
请详细了解您的代码。至少要提供'DataSet1.sDataTable'和'DataSet1.Row'类声明和'webservicefunction'的确切签名。否则很难说为什么你有这样的错误。 –