EF linq/lambda .contains(list[String])?

2019-05-08 04:23发布

问题:

is there any way to evaluate if a string contains some of the elements of a list or all the elements of the list? using linq to entities?

i have been trying to use predicateBuilder and others but im not %100 into thoses.

EDIT

something like:

string[] words = searchString.Split(' ');

var resultado = db.users
                        .Where(u => u.fullName.contains(words) )
                                .Select(s => new { user_id = s.id_user, nombre = s.fullName})
                                .ToList();

回答1:

You need to reverse your use of Contains to check the words collection for the fullName:

string[] words = searchString.Split(' ');

var resultado = db.users
    .Where(u => words.Contains(u.fullName))
    .Select(s => new { user_id = s.id_user, nombre = s.fullName})
    .ToList();

That will match one item in the words array.

To match all of words in a user's fullName, use All:

var resultado = db.users
    .Where(u => words.All(w => u.fullName.Contains(w))
    .Select(s => new { user_id = s.id_user, nombre = s.fullName})
    .ToList();


回答2:

It's better to do with intersect

 IEnumerable<string> first = ...;
 IEnumerable<string> second= ...;
var duplicates = first.Intersect(second);

and doest contains

bool contains = duplicates.Any();