Потеря "Order by" после дополнительного .RemoveAll () с LINQ to ENTITIES (3.5)? - PullRequest
1 голос
/ 01 марта 2012

Мне кажется, что мне нужно "переупорядочить" мой набор результатов после того, как я внесу в него некоторые изменения, является ли это "особенностью", если да, каким-то просветлением?я что-то пропустил?

//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
}

после этой последовательности ... что-то, что я ожидал, будет в порядке, а не ... когда я делаю другой порядок в результирующем наборе, например:

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

, тогда это то, чтоя бы изначально ожидал ..

поэтому я не должен делать какие-либо заказы, пока я не отфильтровал мой результат вниз?В этом случае, очевидно, я мог бы выполнить некоторую фильтрацию исходного запроса, но в моей ситуации я действительно не могу ..

.. заранее спасибо.

ОБНОВЛЕНИЕ:

Я должен сделать для него .ToList () для (.RemoveAll ()), это виновник тогда?

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

1 Ответ

0 голосов
/ 01 марта 2012

IMO Я думаю, что вы должны удалить начальный orderby t.tInt и сделать заказ, как только вы отфильтровали список со своей строкой:

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

Я никогда не слышал о RemoveAll() изменении порядка, ноэто очень возможно.В любом случае будет более эффективно сортировать меньшее количество записей в долгосрочной перспективе.Я почти всегда делаю сортировку после того, как что-то отфильтровал.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...