繁体   English   中英

通过另一个列表的ID从列表中获取项目

[英]Get items from a list by ids of another list

抱歉,如果问题标题令人困惑,我有一个方案,其中有两个类User和Address。

public class User
{
    public int userId { get; set; }
    public string userName { get; set; }

    public List<Address> address { get; set; }
}

public class Address
{
    public string AddressLine { get; set; }
    public string City { get; set; }
    public string State { get; set; }

    public int UserId { get; set; }
}

UserId是类地址中的外键,我有两个列表,即用户列表和地址列表。 用户中地址的值为空,我想获取每个用户的地址列表,我该如何实现? 我知道我们可以使用foreach,但是linq有办法实现吗? 下面是示例代码。

class Program
{
    static void Main(string[] args)
    {
        var users = new List<User>();
        users.Add(new User { userId = 1, userName = "User 1" });
        users.Add(new User { userId = 2, userName = "User 2" });
        users.Add(new User { userId = 3, userName = "User 3" });
        users.Add(new User { userId = 4, userName = "User 4" });

        var address = new List<Address>();
        address.Add(new Address { AddressLine = "Address 1", City = "City 1", State = "State 1", UserId = 1 });
        address.Add(new Address { AddressLine = "Address 1 Dup", City = "City 1", State = "State 1", UserId = 1 });
        address.Add(new Address { AddressLine = "Address 2", City = "City 2", State = "State 2", UserId = 2 });
        address.Add(new Address { AddressLine = "Address 2 Dup", City = "City 2", State = "State 2", UserId = 2 });
        address.Add(new Address { AddressLine = "Address 3", City = "City 3", State = "State 3", UserId = 3 });
        address.Add(new Address { AddressLine = "Address 3 Dup", City = "City 3", State = "State 3", UserId = 3 });


    }
}

Linq版本

List<User> result = users.Select(x => 
                         new User() { 
                            userId = x.userId, 
                            userName = x.userName, 
                            address = address.Where(y => y.UserId == x.userId).ToList() 
                         }).ToList();

imo foreach版本更具可读性

foreach (User user in users)
    user.address = address.Where(y => y.UserId == user.userId).ToList();

使用SelectWhere相当简单。

users = users.Select(u => { u.address = address.Where(a => a.UserId == u.userId).ToList(); return u; }).ToList();

更具可读性的版本:

    users = users.Select(u =>
    {
        u.address = address.Where(a => a.UserId == u.userId).ToList();

        return u;
    }).ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM