При запросе коллекции с использованием linq всегда возвращается ноль - PullRequest
1 голос
/ 30 сентября 2010

При запросе коллекции с использованием linq всегда возвращается ноль

Collection<JCTransLabour> oJCTransLabours = null;

oJCTransLabour = HttpContext.Current.Session["CurrentLabourTransactions"] as 
                                  Collection<JCTransLabour>;

// at this point the collection oJCTransLabours contains 3500 records

var oCurrentLabourTrans = from clt in oJCTransLabours
                          where clt.TransactionDate.Date != DateTime.Now.Date
                          select clt;

// at this point the collection oJCTransLabour = null
// I have tried to search on different fields 

return oCurrentLabourTrans;

Должно быть, я что-то не так делаю. Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

1 голос
/ 30 сентября 2010

В вашем вопросе есть хотя бы одна опечатка.
Вы заявляете, что после

oJCTransLabour = HttpContext.Current.Session["CurrentLabourTransactions"] as Collection<JCTransLabour>;

oJCTransLabour не равно нулю, верно? Это имеет смысл, если сессия содержит его.

Затем вы определяете oCurrentLabourTrans и назначаете ему запрос LINQ. И тогда вы говорите, что

// at this point the collection oJCTransLabour = null

Подождите, как это может быть нулевым? Вы даже не изменили его (оно было oCurrentLabourTrans изменено), и вы просто сказали, что oJCTransLabour не равно нулю!

Обновление: Я только что заметил, что в именах тоже есть тип: вы называете это oJCTransLabours, затем вы называете это oJCTransLabour. Пожалуйста, опубликуйте точный код, чтобы мы не делали предположений о том, что именно вы, возможно, опечатали.

И, конечно, выражение LINQ не может быть нулевым. Я думаю, что наиболее вероятно, что oJCTransLabours является нулевым, хотя вы заявляете иначе.

Возможно, вы так думаете, потому что вы уверены, что HttpContext.Current.Session["CurrentLabourTransactions"] не равно нулю. Это верно, но вы используете оператор as для приведения значения к Collection<JCTransLabour>. В отличие от оператора приведения, as не выдает исключение, если типы не совпадают, он просто возвращает null.

Возможно, вы захотите попробовать

oJCTransLabour = (Collection<JCTransLabour>)HttpContext.Current.Session["CurrentLabourTransactions"];

и посмотрите, появляются ли какие-либо ошибки.

1 голос
/ 30 сентября 2010

Я думаю, вы просто путаете имена переменных:

// You were missing an 's' before
oJCTransLabours = HttpContext.Current.Session["CurrentLabourTransactions"] 
                                    as Collection<JCTransLabour>;
0 голосов
/ 30 сентября 2010

попробуйте это:

var oCurrentLabourTrans = (from clt in oJCTransLabours where clt.TransactionDate.Date != DateTime.Now.Date select clt).ToList();
0 голосов
/ 30 сентября 2010

Это не похоже на проблему linq, а скорее на то, что значение в сеансе равно нулю или не равно Collection<JCTransLabour>.

Вы можете убедиться, что оно не равно нулю, изменив поиск на:

oJCTransLabour = (HttpContext.Current.Session["CurrentLabourTransactions"] as Collection<JCTransLabour>) ?? new Collection<JCTransLabour>();

Если всегда должно быть значение сеанса, вы можете вызвать исключение, если значение не было найдено до выполнения запроса.

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