将具有多列的LINQ转换为数组(供第二个LINQ使用)
本文关键字:LINQ 数组 第二个 使用 转换 | 更新日期: 2023-09-27 18:12:44
USR_MSTR
-可以使用该应用程序的用户列表
PERSONNEL_MSTR
-存储所有用户及其详细信息(名字,姓氏等)。
我的目标是显示可以使用该应用程序的用户列表及其详细信息。所以我做了一个LINQ来得到USR_MSTR
,并将它与第二个LINQ得到PERSONNEL_MSTR
进行比较。我的问题是,我还不确定如何通过EMP_ID
以外的其他细节使用数组,并将其用于第二个LINQ。
注意:我不能使用匿名类型,因为我有错误。
//Get list of login users
var users = from u in _odb.USR_MSTR
select new UserInformationModel
{
empid = u.EMP_ID,
startdate = u.BGN_DT,
enddate = u.END_DT,
usegroupid = u.USR_GRP_ID
};
string[] userList = users.Select(u => u.empid).ToArray();
//Get user information of login users
var userPersonnel = from p in _odb.PERSONNEL_MSTR
where userList.Contains(p.EMP_ID)
select new UserInformationModel
{
empid = p.EMP_ID,
firstname = p.FNAME,
middlename = p.LNAME,
lastname = p.LNAME,
emailadd = p.EMAIL,
//Need to get the startdate, enddate and usergroupid from var users.
//How do I pass that to string[] userList and use it here?
};
看起来像一个简单的左连接。实现这一点的最简单方法之一是在数据库中创建一个视图。如果您将经常从多个(应用程序)视图访问联接数据,那么这是一个很好的方向。但是,过度使用这种方法可能会导致数据库拥有过多的视图,从而变得难以维护。"让数据库做它擅长的事"
Linq语句类似于…
IEnumerable<UserInformationModel> collection = from u in in _odb.USR_MSTR
join p in _odb.PERSONNEL_MSTR on u.EMP_ID equals p.EMP_ID
select new UserInformationModel()
{
empid = u.EMP_ID,
startdate = u.BGN_DT,
...
firstname = p.FNAME,
...
};
要获得更多信息,值得查看101 Linq示例。
可以在select前使用let。
let systemUser = users.FirstOrDefault(x => x.empid = p.EMP_ID)
这将设置一个名为systemUser的变量,您可以从systemUser获取信息。例如,起始日期。当然,您必须先检查它是否为空