Linq to SQL - 如何通过不在select中的列动态过滤

时间:2009-05-12 12:46:53

标签: .net asp.net linq linq-to-sql

问题

使用链接到SQL我想按照我不希望在select语句中返回的列进行过滤。只要查询是一次构建的,这样就可以正常工作。在我尝试动态构建where子句的情况下,我得到编译时错误,因为该列未包含在select中。


实施例

WORKS

Dim resultA = From logItem In dc.Log 
Where logItem.Message.Contains(searchText) 
Select logItem.LogID, logItem.DateLogged

不工作

Dim resultB = From logItem In dc.Log 
Select logItem.LogID, logItem.DateLogged

If (Not String.IsNullOrEmpty(searchText)) Then 
    resultB = q.Where(Function(logItem) 
    logItem.Message.Contains(searchText))
End If

我不确定如何绕过这个。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

之后你不能做选择吗?我不知道Vb,但有点像:

Dim resultA = From logItem in dc.Log Select logItem

If (Not String.IsNullOrEmpty(searchText)) Then resultA = q.Where(Function(logItem) logItem.Message.Contains(searchText))

resultA = from logItem in resultA Select logItem.LogID, logItem.DateLogged

我认为这仍然会产生有用的SQL。

答案 1 :(得分:0)

感谢您输入史蒂文。你的建议让我思考,我的最终解决方案是基于此。但是我找到了一种方法来重用同一个对象,方法是使用Lambda表达式在末尾指定一个select(与where语句的方式相同):

q = q.Select(Function(logItem)New Log With {。LogID = logItem.LogID,.DateLogged = logItem.DateLogged}