そのため、前の質問のコードの一部をやり直しましたが、根本的な問題は同じままです。私がやろうとしているのはこれです:ライトスイッチアプリケーションが起動するとき、共通プロジェクトの関数を呼び出すApplication.cs
メソッドを使用してApplication_LoggedIn()
、ユーザーがアクセスできるすべての場所を取得しています(このデータはテーブルに保存されます)。
クライアント プロジェクト - Application.cs
partial void Application_LoggedIn()
{
Secure.Membership aa = new Membership();
aa.membership();
}
Common Project - メソッドを呼び出した後、membership() 関数でクエリを実行して、ユーザーがアクセスできるすべての場所を取得します。それらは 3 つのリストに格納されます: EstateList、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 つのリスト (不動産、部署、グループ) にアクセスできるようにして、以下に示すようにリストを使用してエンティティに対してフィルターを実行できるようにします。
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);
}
これは私がやりたいことであり、私は問題を抱えています。どんな提案も歓迎します。私がやろうとしたことは、共通プロジェクトで静的クラスを作成して値を設定することですが、あるユーザーが正しく指摘したように、サーバー プロジェクト内から呼び出そうとすると null になるため、それを行うことはできません。ここで私を助けてください。これは私がこのアプリケーションで抱えている大きな問題であり、残っている唯一の部分です。前もって感謝します。
** * ** * ** * ***サーバー側のフィルター コード* @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 エラーが発生します。1つのテーブルだけでは機能しますが、すべてのテーブルでは機能しません。私は何を間違っていますか?