我有一个我尝试查询的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
并收到此错误
Method' System.Object CompareObjectEqual(System.Object,System.Object, 布尔值)'没有受支持的SQL翻译。
并尝试过:
Dim results = From t In dsource Where (t.PN = Session("SAFRReceiverPN")) Select t
在尝试WHERE子句
时似乎没什么用 如果您有任何建议,C#或VB.NET都很酷。 真的,感谢任何帮助。谢谢。答案 0 :(得分:9)
当您尝试访问查询中的会话时,LINQ to SQL不知道该怎么做。而不是这样做,在查询之前从会话中获取值并将结果存储在局部变量中,然后在查询中使用该局部变量。例如,在C#中:
var receiver = (string) Session["SAFRReceiverPN"];
var results = dsource.Where(t => t.PN == receiver);
(当你只是尝试执行一个简单的过滤器时,我不打扰查询表达式。)