none
如何在lambda中对字符串进行复杂查询 RRS feed

  • 问题

  • 我想在lambda中实现类似sql语句中的like功能,比如,like '%101%33%6' 等等,我使用了正则表达式,但是,看起来lambda不支持,我该怎么做?以下是我的代码:

                            Regex reg = new Regex(Code.Replace("%","\\*"));
                            tempFilter = c => Regex.IsMatch(c.code, Code.Replace("%", ".*"));

    以下是系统报错:

    LINQ to Entities 不识别方法“Boolean IsMatch(System.String, System.String)”,因此该方法无法转换为存储表达式。



    2017年5月31日 8:39

全部回复

  • 你好,

    这个因为 LINQ to SQL 把 LINQ 转化成SQL 语句, 当时SQL 语句是不支持 .Net 的方法。我建议你使用ToList 方法把查询结果放到内存,在使用.Net 方法。你可以参考一下下面得例子:

     Regex regEx = new Regex(@"101(\w+)33(\w+)6");
     using (var db = new DataClasses1DataContext())
     {
           var query = db.Offices.ToList().Where(t => regEx.IsMatch(t.Agency));
    
           foreach (var item in query)
           {
                 Console.WriteLine(item.Agency);
           }
    }
    Console.ReadKey();

    Best regards,

    Cole Wu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年6月2日 7:59
    版主
  • 你好michael:

    建议您可以先用SQL存储过程写一个模糊查询(like %%),然后把存储过程拖拽到LINQ-TO-ENTITIES中去。


    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report



    2017年8月6日 8:58