[英]Get n strings from Linq
我試圖讓每個5“NewNumber”int插入到var q中。 假設UniqueNumbers返回了20條記錄,我想得到1-5,6-10,11-15,16-20然后有Number1 = 1,Number2 = 2,Number3 = 3,Number4 = 4,Number5 = 5第一次傳遞給var q,然后是Number1 = 6,Number2 = 7,Number3 = 8,Number4 = 9,Number5 = 10等等......
var UniqueNumbers =
from t in Numbers
group t by new { t.Id } into g
select new
{
NewNumber = g.Key.Id,
};
UniqueNumbers.Skip(0).Take(5)
var q = new SolrQueryInList("NewNumber1", "NewNumber2","NewNumber3","NewNumber4","NewNumber5");
如果您有一個項目列表,您可以輕松地將它們分成五組,如下所示:
int count = 0;
var groupsOfFive =
from t in remaining
group t by count++ / 5 into g
select new { Key=g.Key, Numbers = g };
接着:
foreach (var g in groupsOfFive)
{
var parms = g.Numbers.Select(n => n.ToString()).ToArray();
var q = new SolrQueryInList(parms[0], parms[1], parms[2], parms[3], parms[4]);
}
我想你想要的是一些變化。
另一種方法,如果由於某種原因你不想進行分組,將是:
var items = remaining.Select(n => n.ToString()).ToArray();
for (int current = 0; current < remaining.Length; remaining += 5)
{
var q = new SolrQueryInList(
items[current],
items[current+1],
items[current+2],
items[current+3],
items[current+4]);
}
這兩個都假設項目的數量可以被5整除。如果不是,則必須處理參數不足的可能性。
嘗試這樣的事情:
for (int i = 0; i < UniqueNumbers.Count / 5; i++)
{
// Gets the next 5 numbers
var group = UniqueNumbers.Skip(i * 5).Take(5);
// Convert the numbers to strings
var stringNumbers = group.Select(n => n.ToString()).ToList();
// Pass the numbers into the method
var q = new SolrQueryInList(stringNumbers[0], stringNumbers[1], ...
}
您必須弄清楚如何管理邊界條件,例如,如果UniqueNumbers.Count
不能被5整除。您也可以修改SolrQueryInList
以獲取數字列表,這樣您就不必索引到列表中該電話5次。
編輯:
Jim Mischel指出,循環Skip
操作變得非常昂貴。 這是一個保留你的位置的變體,而不是每次都從列表的開頭開始:
var remaining = UniqueNumbers;
while(remaining.Any())
{
// Gets the next 5 numbers
var group = remaining.Take(5);
// Convert the numbers to strings
var stringNumbers = group.Select(n => n.ToString()).ToList();
// Pass the numbers into the method
var q = new SolrQueryInList(stringNumbers[0], stringNumbers[1], ...
// Update the starting spot
remaining = remaining.Skip(5);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.