C# взятие двух списков различных объектов для создания нового списка объектов - PullRequest
0 голосов
/ 20 марта 2020

У меня медленный момент, и я могу использовать какое-то направление. У меня есть два списка разных объектов, и я создал отдельный класс, в котором конструктор принимает эти два разных объекта. Я пытаюсь найти способ перебрать два моих списка и создать единый новый список моих новых «комбинированных» объектов. Будет ли это сделано с помощью 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; }
    }

Ответы [ 2 ]

2 голосов
/ 20 марта 2020

Я думаю, что вы должны использовать Join:

var result = dbBadgeList.Join(
    dbBadgeProgress,
    badge => badge.badgeId,
    progress => progress.badgeId,
    (badge, progress) => new dabUserBadgeProgress(badge, progress))
.ToList();
0 голосов
/ 21 марта 2020

Я закончил с этим, что дало мне результат, который я искал, похоже, что ответ @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
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...