无效的Cast异常Linq到Sql

时间:2014-02-07 16:23:34

标签: c# sql linq

我为公司编写了一些工资单软件(大约250名员工),当您加载软件时,它会提示您并说新的员工已添加到数据库中。提示强制您选择他们是什么类(经理,销售,人工等)。除了两个使用该软件的用户外,该程序的这一部分适用于所有用户。这两个用户可以取消提示并继续使用该软件而没有任何问题(并且适用于他们的软件部分使用与提示使用的数据库相同的数据库,“AttendanceData”)。以下是他们提交“员工类”信息时收到的错误:

  

指定的演员表无效。在   System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager 2.TryCreateKeyFromValues(Object[] values, V& v) at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache 2.Find(对象[]   keyValues)at   System.Data.Linq.IdentityManager.StandardIdentityManager.Find(元类型   type,Object [] keyValues)at   System.Data.Linq.CommonDataServices.GetCachedObject(MetaType类型,   Object [] keyValues)at   System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc,   对象实例)在   System.Data.Linq.ChangeProcessor.BuildEdgeMaps()at   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode   failureMode)at   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
  在System.Data.Linq.DataContext.SubmitChanges()

下面我提供了处理此提示的代码:

using (AttendanceDataContext AttendanceData = new AttendanceDataContext())
                {
                    var attEmpTbl = AttendanceData.EMPLOYEEs.Where(i => i.ACTIVESTATUS == 0 &&
                                                                   (i.WG2 == 1 ||
                                                                   i.WG2 == 14 ||
                                                                   i.WG2 == 16 ||
                                                                   i.WG2 == 18 ||
                                                                   i.WG2 == 20 ||
                                                                   i.WG2 == 21 ||
                                                                   i.WG2 == 23 ||
                                                                   i.WG2 == 25 ||
                                                                   i.WG2 == 27 ||
                                                                   i.WG2 == 29 ||
                                                                   i.WG2 == 30 ||
                                                                   i.WG2 == 32 ||
                                                                   i.WG2 == 35 ||
                                                                   i.WG2 == 38 ||
                                                                   i.WG2 == 40 ||
                                                                   i.WG2 == 49 ||
                                                                   i.WG2 == 51 ||
                                                                   i.WG2 == 54 ||
                                                                   i.WG2 == 59)).OrderBy(i => i.WG2);
                    List<int> commEmpFilekey = new List<int>();

                    using (CommissionsDataContext CommissionData = new CommissionsDataContext())
                    {
                        commEmpFilekey = CommissionData.EmployeeLists.Select(i => i.FileKey).ToList();
                    }
                    if (commEmpFilekey.Count() > 0)
                    {
                        int records = 0;
                        int record = 1;
                        foreach (var item in attEmpTbl)
                        {
                            if (!commEmpFilekey.Contains(item.FILEKEY.Value))
                            {
                                records++;
                            }
                        }
                        foreach (var item in attEmpTbl)
                        {

                            if (!commEmpFilekey.Contains(item.FILEKEY.Value))
                            {
                                string commID;
                                using (EmployeeEntry ee = new EmployeeEntry(item.FIRSTNAME, item.LASTNAME, item.BADGE.Value, record, records, item.WG2.Value))
                                {
                                    DialogResult result = ee.ShowDialog();
                                    if (result == DialogResult.Yes)
                                    {
                                        using (CommissionsDataContext data = new CommissionsDataContext())
                                        {
                                            commID = ee.commID;
                                            EmployeeList employee = new EmployeeList { FileKey = item.FILEKEY.Value, Badge = item.BADGE.Value, CommID = commID };
                                            data.EmployeeLists.InsertOnSubmit(employee);
                                            data.SubmitChanges();
                                        }
                                    }
                                }
                                record++;
                            }
                        }
                    }
                }

同样,除了我们的“payroll”和“hr”用户之外,此代码适用于所有用户。此外,每个使用该软件的用户都使用我们的本地终端服务器,因此这两个用户的本地PC不具备正确的参考资料......我对此感到困惑......

0 个答案:

没有答案