【问题标题】:Error when using the WHERE clause in Linq-to-SQL在 Linq-to-SQL 中使用 WHERE 子句时出错
【发布时间】:2017-12-18 16:05:00
【问题描述】:

我有一个要查询的数据上下文,我想在单击按钮时将其结果绑定到网格视图。连接到数据上下文效果很好。我得到了我期望的 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 都很棒。 真的,感谢任何帮助,谢谢。

【问题讨论】:

  • 基本上,在查询之外获取Session("SAFERReceiverPN")。把它放在一个局部变量中。我希望这会很好。
  • 非常感谢,就是这样。如果您将其作为答案扔掉,我会为您标记。已经对此表示赞同。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多