Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Linq to SQL-如何按不在select中的列进行动态筛选 问题_.net_Asp.net_Linq_Linq To Sql - Fatal编程技术网

.net Linq to SQL-如何按不在select中的列进行动态筛选 问题

.net Linq to SQL-如何按不在select中的列进行动态筛选 问题,.net,asp.net,linq,linq-to-sql,.net,Asp.net,Linq,Linq To Sql,使用链接到SQL,我想按我不希望在select语句中返回的列进行筛选。只要一次生成所有查询,这就可以正常工作。在我尝试动态构建where子句的情况下,会出现编译时错误,因为select中不包括该列 例子 工作 不起作用 我不知道该如何避开这件事。感谢您的帮助 您不能在以后进行选择吗?我不知道Vb,但类似于: Dim resultA = From logItem in dc.Log Select logItem If (Not String.IsNullOrEmpty(searchText)

使用链接到SQL,我想按我不希望在select语句中返回的列进行筛选。只要一次生成所有查询,这就可以正常工作。在我尝试动态构建where子句的情况下,会出现编译时错误,因为select中不包括该列


例子 工作

不起作用



我不知道该如何避开这件事。感谢您的帮助

您不能在以后进行选择吗?我不知道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。

您不能在以后进行选择吗?我不知道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。

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


q=q.Select(函数(logItem)New Log With{.LogID=logItem.LogID,.DateLogged=logItem.DateLogged}

感谢您的输入Steven。您的建议让我深思,我的最终解决方案就是基于此。不过,我找到了一种方法,通过使用Lambda表达式在末尾指定一个Select来重用同一对象(与where语句相同):


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

第二个代码块中的“q”是什么?不应该是resultB=resultB.Where(…)?第二个代码块中的“q”是什么?不应该是resultB=resultB.Where(…)?没错。第一个查询返回IQueryable(Of t)其中T是一个不包含消息的匿名类型。这是可选where失败的原因。您可以将Select保留到末尾,然后将得到所需的结果。不过,您需要一个新变量来保存Select结果,因为它们将是与resultA不同的类型。没错。您首先查询返回IQueryable(Of T)其中T是不包含消息的匿名类型。这是可选where失败的原因。您可以将Select保留到末尾,然后将获得所需的结果。不过,您需要一个新变量来保存Select结果,因为它们的类型与resultA不同。
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