LINQ orderby int数组索引值

时间:2010-12-21 14:31:02

标签: arrays linq sql-order-by int

使用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 个答案:

答案 0 :(得分:4)

我建议您从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 :(得分:1)

你为什么不加入:

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();
    }
}