在我对其进行一些修改之后,我似乎需要“重新排序”我的结果集,这是“一个特征”,如果是这样,一些启示?我错过了什么吗?
//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
答案 0 :(得分:0)
IMO我认为您应该删除最初的orderby t.tInt
,并在使用您的行过滤列表后执行订单:
resultSet.ToList().RemoveAll(o => o.prop1== 8
&& o.prop1 == 5
&& o.prop1 == 11
&& o.prop1 == 21);
我从来没有听说过RemoveAll()
改变订单,但很有可能。无论哪种方式,从长远来看,对更少的记录进行排序会更有效。我过滤后几乎总是在排序。
希望这有帮助。