繁体   English   中英

LINQ包含奇怪的行为

[英]LINQ Contains weird behaviour

我设法开发了第一个具有CRUD功能的MVC 5 Web应用程序。

我的数据很少有搜索记录的方法,但是其中一种似乎并没有按照我的预期去做。 这是我的控制器搜索查询代码:

query = query.Where(c =>
        c.PostCode.Contains(searchString)
        || c.Place1.Select(e => e.PostCode).Contains(searchString)

这是我的模型:

public Place()
    {
        Place1 = new HashSet<Place>();
    }

    [Display(Name = "Postcode")]
    public string PostCode { get; set; }

    public virtual ICollection<Place> Place1 { get; set; }

我的数据库关系是一个自引用表-> 1到0,因此字段名称相同。

谁能解释我为什么在搜索代码两部分的全值“ NR32 4TW”时搜索功能会带来预期的结果,但是如果我只搜索的第一个查询部分(OR运算符之前)会找到相同的记录会使用“ NR32 4T”进行部分搜索吗?

我已经对照数据库中的其他字段检查了查询,它们具有相同的问题。

TDLR; 当在模型中的Collection上使用LINQ“ .Contains()”时,不会搜索字符串的各个部分。 谁能解释这种行为?

没有考虑到您的区别.... Practice1和Place1

您正在使用2个名称为“包含”的不同函数

c.PostCode.Contains(searchString)

这是String.Contains(string) ...它在您正在调用的字符串中寻找参数...

c.Practice1.Select(e => e.PostCode).Contains(searchString)

这是IEnumerable<string>.Contains(string) ...它在字符串枚举中查找字符串...

您最想做的是:

c.PostCode.Contains(searchString) || c.Practice1.Any(e => e.PostCode.Contains(searchString))

Enumerable.Contains()正在搜索序列(列表)以查看其中是否包含确切的值。 它不是在搜索文本。

您想在每个PostCode的字符串值中搜索部分值,但是您的代码会在邮政编码列表中搜索整个搜索值。 不同之处在于您放在右方括号的位置。

c.Practice1.Select(e => e.PostCode).Contains(searchString)

c.Practice1.Select(e => e.PostCode.Contains(searchString))

通过使用后者遍历每个PostCode的字符串并匹配包含searchString字符串,前者选择所有PostCode然后在该searchString列表中查找与确切的searchString匹配的匹配searchString

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM