【问题标题】:How to perform linq search with spaces如何使用空格执行 linq 搜索
【发布时间】:2016-10-28 13:58:33
【问题描述】:

我有一个从 sql 表中获取数据的 linq 查询。
在我的数据库值中,值后面有空格,如下所示:
“约翰尼(以及之后的 5 个空格)”。 当我尝试查找“Johny”时 - (不带空格)查询不起作用。但是当我搜索“Johny”(在 Johny - 5 个空格之后,它没有显示在那里)-它有效。
因为我无法更改 base 中的某些内容,所以我没有权限。
我怎样才能让它在没有空格的情况下工作 - 只更改我的查询?
我的代码:

var fidn = (repository.users.Join(repository.usersLG, 
                                  post => post.pcod ,    
                                  meta => meta.pcod,  
                                  (post, meta) => new { Post = post, Meta = meta }) 
                             .Where(postAndMeta => postAndMeta.Post.fam_v == "Johny           ").ToList())
                             .Select(x => new  Final { 
                                 mcod = x.Post.mcod,
                                 pcod = x.Post.pcod, 
                                 c_ogrn = x.Post.c_ogrn, 
                                 fam_v = x.Post.fam_v, 
                                 im_v = x.Post.im_v,
                                 ot_v = x.Post.ot_v,
                                 idGK = x.Meta.idGK });

aspnet网页c#实体框架

【问题讨论】:

  • 你可以用fam_v.StartsWith("Johny")代替==
  • 听起来该字段是一个固定宽度的字符字段(例如CHAR(10))。如果是这种情况,只需将您的搜索词填充到字段的宽度即可。
  • @heinzbeinz 那也匹配JohnyBoy,这可能不正确。
  • @DStanley 你是对的。 fam_v.Trim() == "Johny" 应该可以工作

标签: c# asp.net entity-framework linq


【解决方案1】:

使用Trim方法,EF支持:

 //...
 .Where(postAndMeta => postAndMeta.Post.fam_v.Trim() == "Johny") 
 //...

【讨论】:

  • 很高兴知道 ;)。是的,EF 支持一些字符串方法,这些方法可以转换为 sql 中的规范函数。然后你会在我在回答中引用的链接中找到。
  • @octavioccl - 你在我之前就已经有了Trim()。你值得称赞
  • 感谢@GiladGreen,我真诚地感谢你的举动,但如果我们能分享信用就更好了;)。
【解决方案2】:

使用Trim:(在这种情况下还考虑更改为查询语法,IMO 在连接时更具可读性

var fidn = from post in repository.users 
           join meta in repository.usersLG on post.pcod equals meta.pcod
           where post.fam_v.Trim() == "Johny"
           select new Final {
               mcod = post.mcod,
               pcod = post.pcod, 
               c_ogrn = post.c_ogrn, 
               fam_v = post.fam_v, 
               im_v = post.im_v,
               ot_v = post.ot_v, 
               idGK = meta.idGK
           };

也请查看 C# naming conventions 以了解 Final 对象中的属性名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    • 2011-02-27
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多