How to use Linq to check if a list of strings contains any string in a list

后端 未结 5 1554
别跟我提以往
别跟我提以往 2021-02-05 07:12

I\'m constructing a linq query that will check is a string in the DB contains any of the strings in a list of strings.

Something like.

query = query.Whe         


        
相关标签:
5条回答
  • 2021-02-05 07:25

    I am not quite sure from your question if x.tags is a string or list, if it is a list Jon Skeet's answer is correct. If I understand you correctly though x.tags is a string of strings. If so then the solution is:

    list.Any(x => x.tags.IndexOf(x) > -1)
    

    to count them do

    list.Count(x => x.tags.IndexOf(x) > -1)
    
    0 讨论(0)
  • 2021-02-05 07:28

    I've done something like this before:

    var myList = new List<string>();
    myList.Add("One");
    myList.Add("Two");
    
    var matches = query.Where(x => myList.Any(y => x.tags.Contains(y)));
    
    0 讨论(0)
  • 2021-02-05 07:37

    EDIT: This answer assumed that tags was a collection of strings...

    It sounds like you might want:

    var list = new List<string> { ... };
    var query = query.Where(x => x.tags.Any(tag => list.Contains(tag));
    

    Or:

    var list = new List<string> { ... };
    var query = query.Where(x => x.tags.Intersect(list).Any());
    

    (If this is using LINQ to SQL or EF, you may find one works but the other doesn't. In just LINQ to Objects, both should work.)

    To get the count, you'd need something like:

    var result = query.Select(x => new { x, count = x.tags.Count(tag => list.Contains(tag)) })
                      .Where(pair => pair.count != 0);
    

    Then each element of result is a pair of x (the item) and count (the number of matching tags).

    0 讨论(0)
  • 2021-02-05 07:37
      var t = new List<string> { "a", "b", "c" };
    

    var y = "a b d";

    var res = y.Count(x => t.Contains(x.ToString()));

    0 讨论(0)
  • 2021-02-05 07:40

    like this:

    List<string> list = new List<string>();
    list.Add("One");
    list.Add("Two");
    
     var result = query.Where(x => list.Contains(x.tags));
    
    0 讨论(0)
提交回复
热议问题