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

4

有没有办法使用Linq to Entities来评估一个字符串是否包含列表中的某些元素或所有元素?

我一直在尝试使用PredicateBuilder和其他方法,但我对它们不是100%了解。

编辑:

类似这样的:

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();

答案是:是的。或许需要更精确的问题? - Raphaël Althaus
1
是的,您可以使用contains方法来实现这一点。 - rajansoft1
contains可以接受一个列表作为参数吗? - EricGS
2个回答

13
你需要反转对Contains的使用,来检查words集合中是否包含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();

这将匹配words数组中的一个项目。

要匹配用户的fullName中的所有words,请使用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();

那么按顺序匹配呢?比如当 searchString = "Bi Gat" 时匹配 Bill Gates,但是不匹配 searchString = "Gat Bi" 时的 Bill Gates - Kautsky Lozano

0

最好使用交集来处理。

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

并且不包含

bool contains = duplicates.Any();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接