将具有多列的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转换为数组(供第二个LINQ使用)

看起来像一个简单的左连接。实现这一点的最简单方法之一是在数据库中创建一个视图。如果您将经常从多个(应用程序)视图访问联接数据,那么这是一个很好的方向。但是,过度使用这种方法可能会导致数据库拥有过多的视图,从而变得难以维护。"让数据库做它擅长的事"

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获取信息。例如,起始日期。当然,您必须先检查它是否为空