所以我重做了前一个问题的一些代码,但是同样的潜在问题仍然存在。我想要做的是:当我的灯开关应用程序通过Application.cs
我启动时,我正在使用一种方法Application_LoggedIn()
来调用我的公共项目中的一个函数来获取用户可以访问的所有位置(这些数据存储在一个表中)。
客户项目 - Application.cs
partial void Application_LoggedIn()
{
Secure.Membership aa = new Membership();
aa.membership();
}
通用项目 - 调用该方法后,我在 members() 函数中运行我的查询以获取用户可以访问的所有位置。它们存储在三个列表中:estimateList、deptList、groupList;
public void membership() {
List<int> estateList = new List<int>();
List<int> deptList = new List<int>();
List<int> groupList = new List<int>();
var dws = Application.Current.CreateDataWorkspace().sspData;
String uName = Application.Current.User.Identity.Name;
try
{
var qryUser = (from a in dws.aspnet_Users
where a.UserName == uName
select a).Execute().Single();
int membershipId = qryUser.Payroll_MembershipGroup.Id;
var qryOrgMember = (from a in dws.PayrollOrg_MembershipGroups
where a.Payroll_MembershipGroup.Id == membershipId
select a).Execute().ToList();
foreach (var x in qryOrgMember)
{
if (!estateList.Contains(x.Payroll_Organisation.Estate1.ID))
{
estateList.Add(x.Payroll_Organisation.Estate1.ID);
}
if (!deptList.Contains(x.Payroll_Organisation.Estate1.ID))
{
deptList.Add(x.Payroll_Organisation.Department1.ID);
}
if (!groupList.Contains(x.Payroll_Organisation.Estate1.ID))
{
groupList.Add(x.Payroll_Organisation.Payroll_Group1.ID);
}
}
}
catch (Exception e)
{
Debug.WriteLine("***************" + e.InnerException);
}
}
这样做之后我想要的是能够从我的服务器项目内部访问 3 个列表(estate、dept、group),这样我就可以使用该列表对我的实体执行过滤器,如下所示。
partial void Employee_Employs_Filter(ref Expression<Func<Employee_Employ, bool>> filter)
{
filter = e => estateList.Contains(e.Estate1.ID) && deptList.Contains(e.Substantive_Department) && groupList.Contains(e.Payroll_Group1.ID);
}
这就是我想要做的,我遇到了问题。任何建议都会受到欢迎。我试图做的是在我的公共项目中创建一个静态类并设置值,但是正如一位用户正确指出的那样,我不能这样做,因为当我尝试从我的服务器项目中调用它时它将为空。请在这里帮助我,这是我在使用此应用程序时遇到的一个大问题,并且是唯一剩下的部分。提前致谢。
** * ** * ** * ***服务器端的过滤器代码* @Duran 这是我在服务器端的。
public List<User> membership() {
List<User> aList = new List<User>();
User aUser = new aUser();
var dws = Application.Current.CreateDataWorkspace().sspData;
String uName = Application.Current.User.Identity.Name;
try
{
var qryUser = (from a in dws.aspnet_Users
where a.UserName == uName
select a).Execute().Single();
int membershipId = qryUser.Payroll_MembershipGroup.Id;
var qryOrgMember = (from a in dws.PayrollOrg_MembershipGroups
where a.Payroll_MembershipGroup.Id == membershipId
select a).Execute().ToList();
foreach (var x in qryOrgMember)
{
aUser.estateId = x.estateId
auser.deptId = x.deptId;
aUser.groupId = x.groupId;
aList.add(aUser);
}
}
catch (Exception e)
{
Debug.WriteLine("***************" + e.InnerException);
}
return aList;
}
public class User{
public estateId{set;get:}
public deptId{set;get:}
public groupId{set;get:}
}
Now in my filter i would call the method membership() that returns a list<User>
partial void Employee_Employs_Filter(ref Expression<Func<Employee_Employ, bool>> filter)
{
var x = membership();
estId[int] = new [x.count()];
deptId[int] = new [x.count()];
groupId[int] = new [x.count()];
for (int i=0; i<x.count();i++){
estId[i] = x.elementAt(i).estateId;
deptId[i] = x.elementAt(i).deptId;
groupId[i] = x.elementAt(i).groupId;
}
filter = e => estId.Contains(e.Estate1.ID) && deptId.Contains(e.Substantive_Department) && groupId.Contains(e.Payroll_Group1.ID);
}
我必须在我的所有表上放置一个类似于上面的过滤器,那就是当我收到 stackoverflow 错误时。它仅在一张桌子上时有效,但在所有桌子上时无效。我究竟做错了什么?