簡體   English   中英

從Linq獲取n個字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM