2016-06-13 96 views
0

这是我的错误信息The data types text and varchar are incompatible in the equal to operator.我的代码是一样的东西LINQ比较字符串和数据库列类型“文本”

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

我知道原因是columnA的在DB类型是文本,以便他们不能匹配 并且我无法更新数据库方案。

我可以通过使用LINQ to SQL来做到这一点吗?

更新

这是我的DAO

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

运作的? var result = db.Table.Where(x => x.columnA.ToString()==“A”)。ToList(); –

回答

4

TEXT列即使在SQL中也不支持等号运算符。

你必须让这样你的查询转换成一个LIKE运营商,这可与ContainsLIKE '%str%')来实现,StartsWithLIKE '%str')或EndsWithLIKE '%str')。

如果您需要严格的平等,这样的事情应该工作:

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

我认为它会炒作和感谢您的解释,但它太耗时,哈哈。 – MichaelMao

+2

虽然你一般都是对的,但是这个样本并没有提供严格的平等。例如,包含“A blah blah A”的字段将匹配。您可以使用ToString()为Linq To SQL提供==。但是,在文本字段上执行==会是无稽之谈。 –

+0

@CetinBasoz你是对的。这是一个旧项目,我无法更新该部分 – MichaelMao

1

你可以使用这个(我还没有测试的代码)

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

,就可以把列问题一个字符串?我没有任何方法来测试,因为我没有一个Text类型的数据库。

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

开始时是字符串 – MichaelMao

+1

这是OP的问题的实际答案。 –

+0

@CetinBasoz这会导致我的问题相同的错误。你可以在我的问题中看到Update部分。 columnA在开始时是字符串。 – MichaelMao