【问题标题】:C# taking two lists of different objects to construct new list of objectsC# 采用两个不同对象的列表来构造新的对象列表
【发布时间】:2020-03-20 14:47:47
【问题描述】:

我有一个缓慢的时刻,可以使用一些方向。我有两个不同对象的列表,我创建了一个单独的类,它有一个构造函数来接收这两个不同的对象。我试图找到一种方法来遍历我的两个列表并为我的新“组合”对象创建一个新列表。这可能会使用 LINQ 来完成吗?谢谢你的时间。任何帮助都是好的!

最终结果是使 IEnumerable 绑定到 xamarin.forms 中的列表视图,但如果我能在创建新列表时获得一些指导,那将是一个很大的帮助。谢谢!

         List<dbBadges> dbBadgeList = db.Table<dbBadges>().ToList();
         List<dbBadgeProgress> dbBadgeProgress = db.Table<dbBadgeProgress>().ToList();
public class dabUserBadgeProgress
    {
        dbBadges badge;
        dbBadgeProgress progress;
        public dabUserBadgeProgress(dbBadges badge, dbBadgeProgress progress)
        {
            this.badge = badge;
            this.progress = progress;
        }

[Table("Badge")]
    public class dbBadges
    {
        [PrimaryKey, NotNull]
        public int badgeId { get; set; }
        [NotNull]
        public string name { get; set; }
        [NotNull]
        public string description { get; set; }
        [NotNull]
        public string imageURL { get; set; }
        public string type { get; set; }
        public string method { get; set; }
        public string data { get; set; }
        [NotNull]
        public bool visible { get; set; }
        [NotNull]
        public DateTime createdAt { get; set; }
        [NotNull]
        public DateTime updatedAt { get; set; }
    }

public class dbBadgeProgress
    {
        [PrimaryKey, NotNull]
        public int id { get; set; }
        //[NotNull]
        public string data { get; set; }
        [Indexed, NotNull]
        public int badgeId { get; set; }
        //[NotNull]
        public double percent { get; set; }
        //[NotNull]
        public int year { get; set; }
        //[NotNull]
        public bool? seen { get; set; }
        [NotNull]
        public DateTime createdAt { get; set; }
        [NotNull]
        public DateTime updatedAt { get; set; }
    }

【问题讨论】:

  • 在我看来,您需要一个 linq to sql 语句,并在 2 个表和项目之间进行连接,从而形成一种新类型。有很多关于如何做到这一点的例子。如果不更好地了解表之间的关系以及结果模型,我们将无法提供更多帮助。
  • 这两个对象是如何关联的?他们是否有共同的 ID 属性或其他东西?
  • 感谢您的快速回复,但是是的,badid 的常见 ID。我编辑了问题以添加不同的类。
  • 看起来是一对多的关系。同样,有很多关于如何使用 linq 查询一对多关系的示例。
  • 谢谢,成功了。

标签: c# linq


【解决方案1】:

我认为你应该使用Join:

var result = dbBadgeList.Join(
    dbBadgeProgress,
    badge => badge.badgeId,
    progress => progress.badgeId,
    (badge, progress) => new dabUserBadgeProgress(badge, progress))
.ToList();

【讨论】:

    【解决方案2】:

    我最终得到了这个结果,我正在寻找的结果看起来像 @constphi 的答案会做同样的事情。

    IEnumerable<dabUserBadgeProgress> queryBadges =
                from badge in dbBadgeList
                let badgeid = badge.id
                from progress in dbBadgeProgressList
                let progressbadgeid = progress.badgeId
                where badgeid == progressbadgeid
                select new dabUserBadgeProgress(badge, progress)
                {
                    Badge = badge,
                    Progress = progress
                };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-04
      • 2022-10-16
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 2022-11-19
      相关资源
      最近更新 更多