如果其他类属性由数据库

时间:2017-03-21 17:31:59

标签: c# asp.net entity-framework linq

我已经准备好将电脑放在房间里了。很抱歉,如果这是另一个问题的重复,但我正在尝试使用某个属性重新排序对象中的项目。具有此新属性的类使用Entity Framework从我们的数据库获取其值,如下所示:

var products = context.Database
                .SqlQuery<OrderedProduct>(@"SELECT * FROM dbo.tblProductList").ToList();

查询比这更复杂,但这是一般的想法。像MapDataRow()这样的类中没有需要映射到属性的表列名的虚方法。类语法非常基本,如下所示:

public class Product 
{ 
   public Product() 
   {
      MaxAllowed = 1; 
      Selectable = true;
   }
   //properties...
}

所有属性都是公共的,没有一个是静态的,也没有方法。我想要订购的房产是:

public int DisplayOrder {get; set;}

这未在数据库中设置;我正在根据来自数据库的其他属性进行设置,如下所示。一旦我设置了DisplayOrder,我想重新排序internetEquipment:

        for (int i = 0; i < internetEquipment.Count(); i++)
        {
            if (internetEquipment.ElementAt(i).CodeDetail == "Modem1")
                internetEquipment.ElementAt(i).DisplayOrder = 1;
            if (internetEquipment.ElementAt(i).CodeDetail == "Modem2")
                internetEquipment.ElementAt(i).DisplayOrder = 2;
            if (internetEquipment.ElementAt(i).CodeDetail == "Modem3")
                internetEquipment.ElementAt(i).DisplayOrder = 3;
        }

var equipmentReordered = internetEquipment.OrderBy(equip => equip.DisplayOrder).ToList();

我得到一个随机排序的列表而不是获得由DisplayOrder排序的List对象,并且所有DisplayOrder属性都是== 0。 经过长时间的解释,这是我的问题:为什么我不能为我的新属性DisplayOrder分配值?谢谢!

1 个答案:

答案 0 :(得分:0)

猜测这是一个很好的答案;我至少想出了如何按照我需要的方式设置属性,尽管可能有更好的解决方案。 Product类中的解决方法:

    public int DisplayOrder
    {
        get
        {
            if (ServiceCategory == "D")
            {
                if (CodeDetail == "Modem1")
                    return 1;
                if (CodeDetail == "Modem2")
                    return 2;
                if (CodeDetail == "Modem3")
                    return 3;
                else
                    return 0;
            }
            else
            {
                return 0;
            }
        }
    }