EF6 Contains()仅适用于实习字符串

时间:2014-12-29 23:11:45

标签: mysql entity-framework contains

我想按名称属性过滤我的实体。我使用Contains()方法。当我将参数作为“E”传递时,它可以工作,但如果我作为变量传递则不起作用。

代码如下:

if (!String.IsNullOrWhiteSpace(searchingModel.LanguageNameContains))
            query = query.Where(n => n.Name.Contains(searchingModel.LanguageNameContains));

        if (!String.IsNullOrWhiteSpace(searchingModel.LanguageCodeContains))
            query = query.Where(n => n.Code.Contains(searchingModel.LanguageCodeContains));

        return query;

以上示例不起作用。但如果我这样写的话

if (!String.IsNullOrWhiteSpace(searchingModel.LanguageNameContains))
            query = query.Where(n => n.Name.Contains("E"));

        if (!String.IsNullOrWhiteSpace(searchingModel.LanguageCodeContains))
            query = query.Where(n => n.Code.Contains("En"));

        return query;

有效。我调试了很多次。我将相同的参数作为变量和常量传递。如果我作为常量传递它可以工作,但如果我作为变量传递它不起作用。奇怪的是,相同的代码工作MySql.Data.Entity 6.9.3但现在我使用6.9.5,它不起作用。这是一个错误还是我的错误?

生成的SQL: - 当我将参数作为变量传递时:

选择 Extent1IdExtent1CodeExtent1Name 来自Languages AS Extent1  在Extent1Name LIKE'%p__linq__0%'

- p__linq__0:'E'(Type = String,Size = 1)

- 于2014年12月30日22:30:40 +02:00执行

- 在0 ms内完成,结果为:EFMySqlDataReader

当我作为实习字符串传递时:

选择 Extent1IdExtent1CodeExtent1Name 来自Languages AS Extent1  在Extent1Name LIKE'%E%'

第二个返回行,但第一个不返回任何行。

0 个答案:

没有答案