user6116267
user6116267

Reputation:

linq to sql string property contains queryparam array

I have queryparams dto public string[] queryname {get;set;};

  1. if queryname="a" query all name contains "a" data id like 1,4
  2. if queryname="b","c" query all name contains "b,c" data id like 4,5

but var list = db.user.Where(p=>queryname.Contains(p.name));

Now i pass queryname="b","c" query id like 2,3,4,5 ,i hope query id like 4,5 data list ,i want linq to sql code how to coding.

|  user table  |       
|  id  | name  |
|  --  | --    |
| 1    | a     |
| 2    | b     |
| 3    | c     |
| 4    | a,b,c |
| 5    | b,c,d |

Upvotes: 1

Views: 70

Answers (1)

Nguyễn Văn Phong
Nguyễn Văn Phong

Reputation: 14208

Demo on dotnet fiddle

You can use Intersect() to achieve it.

Produces the set intersection of two sequences.

    var queryname = "b,c";
    var data = new []
    {
        new User { UserId = 1, name = "a" },
        new User { UserId = 2, name = "b" },
        new User { UserId = 3, name = "c" },
        new User { UserId = 4, name = "a,b,c" },
        new User { UserId = 5, name = "b,c,d" }

    };      

    var paramArray = queryname.Split(',');
    var result  = data.Where(p => paramArray.Intersect(p.name.Split(',')).Count() == paramArray.Count());
    foreach(var item in result)
        Console.WriteLine(item.UserId);

Output

4
5

Upvotes: 1

Related Questions