Xamarin Forms, Группировка Царства - PullRequest
1 голос
/ 15 марта 2019

Я использую формы Xamarin (стандартный проект .NET), Realm и MVVM Light, и мне нужно сгруппировать список объектов на основе инициала фамилии, чтобы я мог отобразить список переходов в виде списка.

У меня проблема при попытке сгруппировать RealmObject. У меня есть модель, как так ...

public class Participant : RealmObject
{
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string Email {get; set;}
    public string RegistrationCode {get; set;}

    //More properties skipped out for brevity
}

Исходя из этой ссылки , у меня также есть класс группировки, подобный так ...

public class Grouping<K, T> : ObservableCollection<T>
{
    public K Key { get; private set; }

    public Grouping(K key, IEnumerable<T> items)
    {
        Key = key;
        foreach (var item in items)
            this.Items.Add(item);
    }
}

В моей модели просмотра я могу выбрать участников (например, IQueryable<Participant>) следующим образом ...

var participants = RealmInstance.All<Participant>();

Теперь я бы хотел сгруппировать это по инициалам фамилии, для которой я делаю следующее:

var groupedParticipants = from participant in participants
                          group participant by participant.LastName.Substring(0, 1) into pGroup
                          orderby pGroup.Key
                          select new Grouping<string, Participant>(pGroup.Key, pGroup);

, который выдает следующее исключение:

System.TypeInitializationException: инициализатор типа для 'Realms.RealmCollectionBase' вызвал исключение. ---> System.ArgumentException: тип свойства IGrouping не может быть выражен как тип схемы Realm

Я осмотрелся, но не смог найти рабочих примеров группировки наборов областей. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 16 марта 2019

Realm не поддерживает GroupBy (или прогнозы на основе выбора) Linq.

Обходной путь - перевести отсортированный запрос на основе Realm к стандартному List и затем выполнить Linq GroupBy.

Пример (с использованием проекта Обезьяны Джеймса Монтемано):

var realmSort = r.All<Monkey>().OrderBy(m => m.Name).ToList();
var sorted = from monkey in realmSort
                 orderby monkey.Name
                 group monkey by monkey.NameSort into monkeyGroup
                 select new Grouping<string, Monkey>(monkeyGroup.Key, monkeyGroup);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...