在Linq-to-SQL中使用WHERE子句时出错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Linq-to-SQL中使用WHERE子句时出错相关的知识,希望对你有一定的参考价值。

我有一个我正在尝试查询的datacontext,我想在按钮点击时绑定到gridview的结果。连接到datacontext非常有用。我得到了我期望的1000条记录。当我尝试添加WHERE子句时,我遇到了问题。这是我想要实现的按钮事件:

Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs)         
      Dim dsource = New MY_DataContext().SV_XXXs '--- This works, the data is all there        
      gridRec.DataSource = dsource.ToList().Where(Function(dtable) dtable.PN = Session("PN"))   '--- this fails
      '--- Also tried this, it also did not work ----------------------------------------------------------
      '--- gridRec.DataSource = dsource.Where(Function(dtable) dtable.PN = Session("PN"))   '--- this fails
      '----------------------------------------------------------------------------------------------------
      gridRec.DataBind()       
End Sub

会话变量有效且dsource正确填充,但在尝试执行Where子句时出现以下错误:

评估方法System.Linq.SystemCore_EnumerableDebugView`1 [SV_REC] .get_Items()调用本机方法System.WeakReference.get_Target()。不支持在此上下文中评估本机方法。

还尝试过:

Dim results =
        (
            From T In dsource
            Where T.PN = Session("SAFRReceiverPN")
            Select T
        ).ToList

并得到这个错误

方法'System.Object CompareObjectEqual(System.Object,System.Object,Boolean)'没有支持的SQL转换。

并试过:

Dim results = From t In dsource Where (t.PN = Session("SAFRReceiverPN")) Select t

在尝试WHERE子句时似乎没有什么对我有用

如果您有任何建议,C#或VB.NET都很酷。真的,任何帮助表示赞赏,谢谢。

答案

当您尝试访问查询中的会话时,LINQ to SQL不知道该怎么做。而不是这样做,在查询之前从会话中获取值并将结果存储在局部变量中,然后在查询中使用该局部变量。例如,在C#中:

var receiver = (string) Session["SAFRReceiverPN"];
var results = dsource.Where(t => t.PN == receiver);

(当你只是尝试执行一个简单的过滤器时,我不打扰查询表达式。)

以上是关于在Linq-to-SQL中使用WHERE子句时出错的主要内容,如果未能解决你的问题,请参考以下文章

有一个 mySQL 错误,未知列 where 子句 [重复]

linq-to-sql 是不是处理动态查询?

162-mybatis为什么要使用where标签呢?

在 where 子句中使用多个条件时出现关系运算符错误

我们可以在 WHERE 子句中对同一列使用多个 AND 条件吗? [复制]

Spring JPA:从没有where子句的表中查询一列