【问题标题】:Use .Contains() in EF 6在 EF 6 中使用 .Contains()
【发布时间】:2016-08-09 22:09:27
【问题描述】:

我使用以下 Linq 查询:

var projectList = from p in dbContext.vw_Projektkontrolle
                       where p.TXT_Adress1.Contains(filterTxt)
                       orderby p.TXT_Name
                       select p;

我的projectList 始终为空。 在调试中我可以看到,filterTxt 是例如“testcompany”。

在 EF 6 中是否仍在使用 Contains 方法或有任何工作 周围?

我通过 Form Post 将 filterTxt 传递给我的 MVC 应用程序中的 Action 方法。

如何解决这个问题。

编辑:当我只使用一个 char f.ex: "a" as filterTxt 时它可以工作。

但是TXT_Adress1filterTxt 都被声明为字符串

【问题讨论】:

  • 这里包含的是String方法,与实体框架无关。确保 dbContext.vw_Projektkontrolle 包含 TXT_Adress1 包含过滤器文本的元素。
  • 你试过使用 Lambda 表达式吗?类似var projectList = dbContext.vw_Projektkontrolle.Where(x => x.TXT_Adress1.Contains(filterTxt)).OrderBy(o => o.TXT_Name).ToList();
  • 我试过 Lambda,结果是一样的。没有。我绝对确定 TXT_Adress1 中包含 filterTxt,所以我想知道为什么它不会将过滤器附加到字符串中。 @SelvaTS
  • 您检查过 EF 中形成的查询是什么吗?
  • 这里有很多令人困惑的 cmets。人们,LINQ(也适用于流畅的语法)将由实体框架转换为 SQL。 .NET 的 string.Contains() 不会被调用。此外,区分大小写取决于数据库排序规则。所以请 OP,显示您数据库中的数据和您正在搜索的 filterTxt

标签: c# entity-framework linq contains


【解决方案1】:

String.Contains 方法转换为:

CHARINDEX(ShowTypeDescriptio, @showTypeDescription) > 0

可能会尝试使用小写:

var projectList = from p in dbContext.vw_Projektkontrolle
                   where p.TXT_Adress1.ToLower().Contains(filterTxt.ToLower())
                   orderby p.TXT_Name
                   select p;

即使它有效,您也可能面临Turkey Test 问题

【讨论】:

  • 成功了!我用 toUpper() 试过了,但没有用。谢谢你帮了我很多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
相关资源
最近更新 更多