通过加入从另一个列表中填写属性

发布于 2025-01-26 12:17:22 字数 661 浏览 1 评论 0原文

我有两个模型:

public class Payment
{
  public Guid UserId {get;set;}
  public string UserName {get;set;}
  public string AddressLine1 {get;set;}
  public string AddressLine2 {get;set;}
  public decimal Amount{get;set;}
}

public class User
{
  public Guid Id {get;set;}
  public string Name {get;set;}
  public string PhoneNumber {get;set;}
}

在业务逻辑中,我正在做一些事情并接收两个对象:

list< user>用户list<付款>付款。属性用户名 付款的一件事是空的,我需要通过加入两个列表(user.id == payment.userid)来填充它,

如何加入两个列表并接收列表&lt;付款&gt;付款带有填充<代码>用户名?

I have two models:

public class Payment
{
  public Guid UserId {get;set;}
  public string UserName {get;set;}
  public string AddressLine1 {get;set;}
  public string AddressLine2 {get;set;}
  public decimal Amount{get;set;}
}

public class User
{
  public Guid Id {get;set;}
  public string Name {get;set;}
  public string PhoneNumber {get;set;}
}

In business logic I am doing some stuff and receive two objects:

List<User> users and List<Payment> payments. One thing that properties UserName in payments are empty and I need to fill it by joining two lists (user.Id==payment.UserId).

How to join two lists and receive List<Payment> payments with a filled UserName?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白芷 2025-02-02 12:17:22

有很多方法可以使用:

解决方案1:付款 JOIN 用户。

payments = (from a in payments
join b in users on a.UserId equals b.Id
select new Payment
{
    UserId = a.UserId,
    UserName = b.Name,
    AddressLine1 = a.AddressLine1,
    AddressLine2 = a.AddressLine2,
    Amount = a.Amount
})
.ToList();

payments = payments.Join(users,
    payment => payment.UserId,
    user => user.Id,
    (payment, user) => new Payment 
    {
        UserId = payment.UserId,
        UserName = user.Name,
        AddressLine1 = payment.AddressLine1,
        AddressLine2 = payment.AddressLine2,
        Amount = payment.Amount
    }
);

解决方案2:迭代付款和查询用户

using System.Linq;

foreach (var payment in payments)
{
    var user = users.Single(x => x.Id == payment.UserId);

    payment.UserName = user.Name;
}

There are plenty of ways to work with:

Solution 1: payments join users.

payments = (from a in payments
join b in users on a.UserId equals b.Id
select new Payment
{
    UserId = a.UserId,
    UserName = b.Name,
    AddressLine1 = a.AddressLine1,
    AddressLine2 = a.AddressLine2,
    Amount = a.Amount
})
.ToList();

Or

payments = payments.Join(users,
    payment => payment.UserId,
    user => user.Id,
    (payment, user) => new Payment 
    {
        UserId = payment.UserId,
        UserName = user.Name,
        AddressLine1 = payment.AddressLine1,
        AddressLine2 = payment.AddressLine2,
        Amount = payment.Amount
    }
);

Solution 2: Iterate with payments and query for user.

using System.Linq;

foreach (var payment in payments)
{
    var user = users.Single(x => x.Id == payment.UserId);

    payment.UserName = user.Name;
}
何其悲哀 2025-02-02 12:17:22

使用以下方式:

var query = from payment in Payment
            join user in User
                 on payment.UserId equals user.Id
            select new
            {
             payment.UserId,
             payment.serName,
             payment.AddressLine1,
             payment.AddressLine2,
             payment.Amount,
             user.Name,
             user.PhoneNumber
            };

use this :

var query = from payment in Payment
            join user in User
                 on payment.UserId equals user.Id
            select new
            {
             payment.UserId,
             payment.serName,
             payment.AddressLine1,
             payment.AddressLine2,
             payment.Amount,
             user.Name,
             user.PhoneNumber
            };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文