Linq to sql LinqToSql对数据库生成不正确的查询
我对LinqToSql和PredicateBuilder有问题 我有下面的代码Linq to sql LinqToSql对数据库生成不正确的查询,linq-to-sql,predicatebuilder,Linq To Sql,Predicatebuilder,我对LinqToSql和PredicateBuilder有问题 我有下面的代码 Dim vQuery As IQueryable(Of Table1) = pContext.Table1 Dim predicate As Expression(Of System.Func(Of Table1, Boolean)) = Nothing .... Dim predicateAdd As Expression(Of System.Func(Of Table1, Boolean)) = Predic
Dim vQuery As IQueryable(Of Table1) = pContext.Table1
Dim predicate As Expression(Of System.Func(Of Table1, Boolean)) = Nothing
....
Dim predicateAdd As Expression(Of System.Func(Of Table1, Boolean)) = PredicateBuilder.True(Of Table1)()
predicateAdd = predicateAdd.And(Function(a As Table1) a.Table2.Table3.Select(Function(c) c.Column1).Contains(TextToSearch))
predicate = predicate.And(predicateAdd)
....
Me.Grid.DataSource = vQuery.Where(predicate)
这将生成对数据库的以下查询
SELECT [t0].[ID], ...
FROM [dbo].[Table1] AS [t0]
WHERE EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[Table2] AS [t1], [dbo].[Table3] AS [t2]
WHERE ([t2].[Column1] = @p0) AND ([t1].[ID] = [t0].[ID]) AND ([t2].[ID] = [t1].[ID])
)
-- @p0 is TextToSearch
WHERE ([t2].[Column1] Like @p0)
但那不是我想要的
这行代码
a.Table2.Table3.Select(Function(c) c.Column1).Contains(TextToSearch)
必须生成对数据库的下一个查询
SELECT [t0].[ID], ...
FROM [dbo].[Table1] AS [t0]
WHERE EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[Table2] AS [t1], [dbo].[Table3] AS [t2]
WHERE ([t2].[Column1] = @p0) AND ([t1].[ID] = [t0].[ID]) AND ([t2].[ID] = [t1].[ID])
)
-- @p0 is TextToSearch
WHERE ([t2].[Column1] Like @p0)
但不是这个
WHERE ([t2].[Column1] = @p0)
如果我在某个地方出错,或者这是LinqToSql中的一个错误,那么在调用Select()的结果上调用Contains与在字符串字段上调用它不同。生成的代码完全符合您所编写的内容 由于您以这种方式调用了Contains(),因此它正在测试返回集合中的每个项是否相等