LINQ比较字符串和数据库列类型'text'

时间:2016-06-13 09:00:58

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

这是我的错误消息The data types text and varchar are incompatible in the equal to operator.我的代码类似于

var result = db.Table.Where(x => x.columnA == "A").ToList();

我知道原因是DB中的columnA类型是文本,因此无法匹配 我无法更新数据库方案。

我可以使用LINQ to SQL吗?

更新

这是我的DAO

[Required]
[StringLength(10)]
public string MessageName { get; set; }

4 个答案:

答案 0 :(得分:5)

TEXT列不支持等于运算符,即使在SQL中也是如此。

您必须这样做才能将您的查询转换为LIKE运算符,这可以通过ContainsLIKE '%str%'),StartsWithLIKE '%str'来实现)或EndsWithLIKE '%str')。

如果你需要严格的平等,那么这样的事情应该有效:

var result = db.Table.Where(x => x.columnA.StartsWith("A") &&
                                 x.columnA.EndsWith("A")).ToList();

答案 1 :(得分:1)

你可以使用它(我没有测试过代码)

var result = db.Table.Where(x => x.columnA.Contains("A").ToList();

答案 2 :(得分:1)

你可以将有问题的列转换为字符串吗?我没有办法测试这个,因为我没有Text类型的数据库。

var result = db.Table.Where(x => x.columnA.ToString() == "A").ToList();

答案 3 :(得分:1)

我尝试了上述所有解决方案,但没有一个修复对我有用,所以在这里我发布了对我有用的修复

 var result = db.Table.Where(x => Convert.ToString(x.columnA) == "A").ToList();