我有一个要查询的datacontext,要单击按钮将其结果绑定到gridview。连接到数据上下文效果很好。我得到了我期望的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);
(当您尝试执行简单的过滤器时,我不会打扰查询表达式。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句