使用LINQ to ENTITIES(3.5)添加.RemoveAll()之后丢失“Order by”?

时间:2012-03-01 00:36:25

标签: linq entity-framework linq-to-entities

在我对其进行一些修改之后,我似乎需要“重新排序”我的结果集,这是“一个特征”,如果是这样,一些启示?我错过了什么吗?

//need the "IN" type functionality to limit my initial set.
 var resultSet = from t in someContext.SomeEntities
                       .Where("it.some_id IN{" + string.Join(",", array) + "}")
                              where t.obj_id == objtId
                              orderby t.tInt
                              select new customObj
                              {
                                  prop1= t.t1,
                                  prop2 = t.tInt,
                                  prop3 = t.tInt2 
                              };

//Do some other lookups / decision branching and 
//determine that i need to remove the following:

//just for arguments sake
resultSet.ToList().RemoveAll(o => o.prop1== 8 
                    && o.prop1 == 5 
                    && o.prop1 == 11 
                    && o.prop1 == 21); 


foreach (var vals in resultSet)
{
//do something that depends on the order
}

在那个序列之后...我希望它按顺序排列,不是..当我在结果集上做另一个orderby时:

foreach (var vals in resultSet.OrderBy(o => o.tInt))
{
   //now the order's okay
}

那就是我原本预期的......

所以在我过滤掉我的结果集之前,我不应该做任何订购吗?在这种情况下,显然我可以对初始查询进行一些过滤,但在我的情况下,我真的不能..

..提前谢谢。

更新:

我必须在(.RemoveAll())上为它做一个.ToList(),那是罪魁祸首吗?

http://msdn.microsoft.com/en-us/library/wdka673a%28v=vs.90%29.aspx

1 个答案:

答案 0 :(得分:0)

IMO我认为您应该删除最初的orderby t.tInt,并在使用您的行过滤列表后执行订单:

resultSet.ToList().RemoveAll(o => o.prop1== 8 
                    && o.prop1 == 5 
                    && o.prop1 == 11 
                    && o.prop1 == 21);

我从来没有听说过RemoveAll()改变订单,但很有可能。无论哪种方式,从长远来看,对更少的记录进行排序会更有效。我过滤后几乎总是在排序。

希望这有帮助。