我正在努力解决如何在LightSwitch中执行以下操作。我在partial void tblStaffExtendeds_Updating(tblStaffExtended entity)
期间'拦截'实体,然后从我们的本地ldap
中提取一些数据,并尝试将实体的某个属性设置为特定值,如下所示:
partial void tblStaffExtendeds_Updating(tblStaffExtended entity)
{
string ldapPath = @"LDAP://DC=myLDAP,DC=myLDAP";
string user = entity.GPEmployeeID.ToString();
string[] props = {
ActiveDirectoryInfo.strings.DISPLAYNAME, ActiveDirectoryInfo.strings.EMAIL,
ActiveDirectoryInfo.strings.LOGONALIAS, ActiveDirectoryInfo.strings.PHONE,
ActiveDirectoryInfo.strings.OFFICE, ActiveDirectoryInfo.strings.TITLE,
ActiveDirectoryInfo.strings.GPEMPLOYEEID
};
var propResults = ActiveDirectoryInfo.UserPropertySearchByGPEmpID(user, ldapPath, props);
entity.tblAdminStaffType.StaffType = propResults[ActiveDirectoryInfo.strings.TITLE];
entity.WorkEmail = propResults[ActiveDirectoryInfo.strings.EMAIL];
entity.UserID = propResults[ActiveDirectoryInfo.strings.LOGONALIAS];
entity.WorkPhone = propResults[ActiveDirectoryInfo.strings.PHONE];
}
现在,对于WorkEmail
和WorkPhone
这样的字段,效果很好,因为这些属性只是strings
,这就是我从LDAP
获得的内容。
但是,我是否要设置StaffType
这是对Admin Table条目的引用? LDAP返回一个string
,它与管理员表上的描述相匹配,但在实体上,我需要将其设置为正确的ID,我假设。
有没有办法做到这一点,没有创建“查找”方法,通过将描述与String
中的LDAP
匹配,从管理员表中查找ID?
答案 0 :(得分:1)
解决方案应该如下所示:
string title = propResults[ActiveDirectoryInfo.strings.TITLE];
var qryAdminStaffType = from st in DataWorkspace.ApplicationData.StaffTypes
where st.Title == title
select st;
entity.tblAdminStaffType.StaffType = qryAdminStaffType.FirstOrDefault();
在这个例子中,我假设您的数据源名为ApplicationData(LS默认名称), StaffTypes 表保存您的员工类型,并且您匹配标题属性。请注意,如果标题不匹配,FirstOrDefalt()将返回null。