LINQ orderby int значение индекса массива - PullRequest
1 голос
/ 21 декабря 2010

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

Так что в приведенном ниже коде attribueIds - это мой массив int. Я использую целые числа в этом массиве для предложения where, но мне бы хотелось, чтобы результаты были в том порядке, в котором они были в массиве.

public List BuildTable(int[] attributeIds)
{
    using (var dc = new MyDC())
    {
        var ordering = attributeIds.ToList();

        var query = from att in dc.DC.Ecs_TblAttributes
                    where attributeIds.Contains(att.ID)
                    orderby(ordering.IndexOf(att.ID))
                    select new Common.Models.Attribute
                    {
                        AttributeId = att.ID,
                        DisplayName = att.DisplayName,
                        AttributeName = att.Name
                    };

        return query.ToList();
    }
}

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010

Я бы рекомендовал выбирать из массива attributeIDs. Это гарантирует, что ваши предметы будут правильно упорядочены без необходимости сортировки.

Код должен выглядеть примерно так:

var query = 
from id in attributeIds
let att = dc.DC.Ecs_TblAttributes.FirstOrDefault(a => a.ID == id)
where att != null
select new Common.Models.Attribute
{
    AttributeId = att.ID,
    DisplayName = att.DisplayName,
    AttributeName = att.Name
};
1 голос
/ 21 декабря 2010

Почему бы вам не присоединиться:

public List BuildTable(int[] attributeIds)
{
    using (var dc = new MyDC())
    {
        var query = from attID in attributeIds
                    join att in dc.DC.Ecs_TblAttributes
                    on attID equals att.ID
                    select new Common.Models.Attribute
                           {
                               AttributeId = attID,
                               DisplayName = att.DisplayName,
                               AttributeName = att.Name
                           };
         return query.ToList();
    }
}
...