簡體   English   中英

C#清單 <List<string> &gt;用LinQ過濾

[英]C# List<List<string>> filtering with LinQ

我有一個List <List <string >>,需要過濾內部List。 看起來像這樣:

{["/DownloadFile2.aspx?File=1026704PR20131001.PDF","10/1/2013 | Monthly Memo","10/1/2013","","","CI","","","","","",""],
 ["/DownloadFile2.aspx?File=1026704PR20141001.PDF","10/1/2014 | Monthly Memo","10/1/2014","","","CC","","","","","",""],
 ["/DownloadFile2.aspx?File=1026704date20130928.PDF","9/30/2013 | New Memo","9/30/2013","","","CC","","","","","",""],
 ["/DownloadFile2.aspx?File=1026704date20140928.PDF","9/30/2014 | New Memo","9/30/2014","","","CI","","","","","",""]}

如何使用LINQ .Where子句過濾第二列?

就像過濾術語“每月”將返回:

{["/DownloadFile2.aspx?File=1026704PR20131001.PDF","10/1/2013 | Monthly Memo","10/1/2013","","","CI","","","","","",""],
 ["/DownloadFile2.aspx?File=1026704PR20141001.PDF","10/1/2014 | Monthly Memo","10/1/2014","","","CC","","","","","",""]}

添加代碼

我的Web服務中的存檔定義:

[DataContract(Namespace = "http://www.mysite.com")]
public class Archive
{
    [DataMember]
    public List<string> Header {get; set;}

    [DataMember]
    public List<List<string>> Rows{get; set;}
}

從服務獲取存檔的代碼(mps是Web服務)

/// param contains values used to retrieve a partial set
/// as well as other values used to pass data to jQuery DataTable
///
Archive docs = mps.GetArchiveArray(LogonTicket, PID, param.iDisplayStart, param.iDisplayLength, "D");

List<List<string>> filteredRows;

// If the params sSearch value is not null or empty, filter the results
// else return the full results
if (!string.IsNullOrEmpty(param.sSearch))
{
    // Here's where I need to filter the result set based on the params.sSeach value.
    filteredRows = docs.Rows.?????;
}
else
{
    filteredRows = docs.Rows;
}

然后將filterRows通過循環傳遞,以使用StringBuilder構建我的JSON,然后將所需的完整結果作為JSON發送:

string result =  sb.ToString();
return Json(new
{
    sEcho = param.sEcho,
    iTotalRecords = numDocs,
    iTotalDisplayRecords = numDocs,
    aaData = result
},
JsonRequestBehavior.AllowGet);

使用外部列表上的Select子句,如下所示:

outerList.Select(inr => inr.Where(...))
var lists = ...;
var filteredLists = (from list in lists
                     where list[1].EndsWith(" | Monthly Memo")
                     select list).ToList();

或者,如果僅包含“ Monthly

var lists = ...;
var filteredLists = (from list in lists
                     where list[1].Contains("Monthly")
                     select list).ToList();

否則小寫/大寫都沒關系

var lists = ...;
var filteredLists = (from list in lists
                     where list[1].ToLower().Contains("monthly")
                     select list).ToList();

引入ToList ,lambda語法可能更清晰:

var filteredLists = lists.Where(list => list[1].Contains("Monthly"))
                         .ToList()

編輯如果要檢查所有列:

var filteredLists = lists.Where(list => list.Any(s => s.Contains("Monthly")))
                         .ToList()

使用它(有效):

var listsWithMonthly = listOfLists.Where(x => x.Any(subx => subx.Contains("Monthly"))).ToList();

為了僅在內部列表的第二列上進行過濾,這也可以工作:

var listsWithMonthly = listOfLists.Where(x => x[1].Contains("Monthly")).ToList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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