检查CSV字符串是否包含给定值C#

时间:2014-07-01 12:30:33

标签: c# asp.net linq csv

我正在读取以逗号分隔的数字ID列表,该列表存储为字符串。我需要检查该列表中是否已存在id。例如:

“1,2,3”

如果我检查“2”我应该找到它,但如果我检查“22”我不应该。

这样做最直接,最简洁的方法是什么?

我目前的代码如下:

HttpCookie cookie = Request.Cookies.Get("wishlist");
if (cookie != null)
{
     var JSONstring = cookie.Value; //Cookie stored as JSON
     Dictionary<string, List<dynamic>> jObj = JsonConvert.DeserializeObject<Dictionary<string, List<dynamic>>>(JSONstring); 

     // Retreive only the nodeId of each item and store it in a CSV list
     string umbracoCSV = String.Join(",", jObj.SelectMany(x => x.Value).Select(x => x.nodeId));

     // Convert the CSV into an IEnumerable list of ints
     IEnumerable<int> umbracoNodeIdList = umbracoCSV.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(int.Parse); 

     foreach(int umbracoNodeId in umbracoNodeIdList){
         if(umbracoNodeId == 2){
              // Do code if it matches
         }else{
              // Do code if it doesn't match
         }
     } 
}

正如您所看到的,此代码包含一个非常不必要的循环,我真的希望能够直接解析CSV字符串而不是执行嵌套循环(因为如果不可能,此循环将嵌套在另一个循环中) )。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

您可以使用Any方法简化代码:

bool isExists = umbracoCSV.Split(',').Any(x => x == "2");

if(isExists) { }

答案 1 :(得分:0)

你有几个选择:

  • 在字符串

    中找到2
    if(umbracoCSV.Contains(",2,") //,2, is to rule out 22
        //Do something
    
  • 使用正则表达式而不是String.Contains

  • 拆分字符串并在其上使用Any

    var toArray = umbracoCSV.Split(',');
    if(toArray.Any(x => x == "2")
        //Do something
    
  • 如果您仍然使其成为IEnumerable<int>,您还可以使用Any

    if(umbracoNodeIdList.Any(x => x == 2)
        //Do something