在vb.net程序中指定有效谓词时出现问题



我目前正在支持一个旧的vb.net应用程序,我正试图将其迁移到另一个域。当在旧域上运行时,它工作得很好,但当在新域中运行.exe时,会弹出此错误:

System.ArgumentException:必须为过滤结果。参数名称:谓词位于System.Data.Objects.ObjectQuery`1.Where(字符串谓词,ObjectParameter[]parameters(中的COOP_Incention.frmEmployeeMaster.LoadDefaultData((C: \Users\username\Desktop\CBVS For new_domain\COOPIncentive\Forms\Setup-EmployeeMaster.vb:COOP_Incentive.frmEmployetMaster.frmEmploye_Master_Load处的第78行
(对象发件人,EventArgs e(,位于C:\Users\username\Desktop\CBVS Fornew_domain\COOP激励\表格\设置-员工Master\frmEmployeeMaster.vb:第329行System.Windows.Forms.Form.OnLoad(EventArgs e(位于System.Windows.Forms.Control.CreateControl(布尔值fIgnoreVisible(
位于位于的System.Windows.Forms.Control.SetVisibleCore(布尔值(位于的System.Windows.Forms.Form.SetVisibleCore(布尔值(WeifenLuo.WinFormsUI.Docking.DockContentHandler.SetVisible((位于WeifenLuo.WinFormsUI.DockPane.set_ActivitContent(IDockContent值(WeifenLuo.WinFormsUI.Docking.DockContentHandler.Activate((位于WeifenLuo.WinFormsUI.对接.DockContentHandler.Show(DockPaneldockPanel,DockState DockState(中的COOP_Incention.frmEmployeeMaster.Show(DockPanel DockPanel(C: \Users\username\Desktop\CBVS For new_domain\COOP激励\表格\设置-员工主管\ frmEmployeeMaster.vb:line 356在COOP_Incention.frmMenu.cmdEmployeeMaster_Click(对象发送器,C:\Users\username\Desktop\CBVS中的EventArgs e(For new_domain\COOP激励\Forms\MainForms\frmMenu.vb:第26行System.Windows.Forms.Control.OnClick(EventArgs e(位于System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent(位于System.Windows.Forms.Control.WmMouseUp(消息&m,鼠标按钮按钮,Int32次点击(System.Windows.Forms.Control.WndProc(消息&m(位于System.Windows.Forms.ButtonBase.WndProc(消息&m(位于System.Windows.Forms.Button.WndProc(消息&m(位于System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&m(
位于System.Windows.Fforms.NativeWindow.Callback(IntPtr hWnd,Int32消息,IntPtr wparam,IntPtr lparam(

根据错误消息,这是它所指的代码:

cboBusinessUnit.DataSource = (From r In DefaultBusinessUnitSet.Where(filter).Execute(MergeOption.PreserveChanges) _
Order By r.BussinessCode _
Select New With {.id = r.BussinessCode, .text = r.BussinessName}).ToList()

这是滤波器变量;其中";部件:

Dim filter As String = String.Join(" or ", (From result In SessionUtil.AllowedEmployerCodes _
Let c = " it.BussinessCode='" + result + "' " _
Select c).ToArray())

我不熟悉这种错误,我该如何解决?

过滤器字符串可能遇到了一些使其无效的因素。我建议在抛出错误时显示筛选值。举个例子,可能是你的一个员工代码中有一个撇号。在这种情况下,您需要用替换来包装结果,例如替换(result,","(。

在检查过滤器变量时,它没有反映任何数据。我需要检查SessionUtil.AllowedEmployerCode的所有引用,发现在登录过程中,它将基于你的SID。我忽略了一个表,在该表中我应该将SID从旧域更新到新域。它成功了!

最新更新