smll, Правда x.ManagementContract.FirstOrDefault(y => y.IsActual) айайай 2 раза выполняется) Дык ведь почему оно два раза выполняется? А потому, что блятский Predicate.And принимает в параметр тип Expression - т.е. тупо одно выражение, т.е. нельзя туда запихнуть функцию (даже анонимную, если в ней более одной строки), иначе Linq-2-Sql выплюнет рантайм-эксепшн. Ну оно и понятно, потому что эта хрень потом должна как-то преобразовываться в SQL-запрос)) Вот я и извращаюсь, чтобы всё впихнуть в одно выражение. Может конечно, есть какие-то обходные варианты, но мне они не известны.
А твоё я не догадался что делает =) По крайней мере без конекста. Но красоту оценил хД
мм хотя надо попробовать, может Linq достаточно умный чтобы если "x.ManagementContract.FirstOrDefault(y => y.IsActual) == null" самостоятельно вернуть "false" и не надо указывать это явно))
taburetka91, о, Linq, я туда пока слава богу не лезу =)
Мой пример: beforePeakChange - это тип делегата - public delegate bool beforePeakChange(PeakDB Sender, int Index, ref Peak NewPeak); BeforePeakChange - переменная этого типа Так как делегат может быть множественным, но при этом возвращает значение, я организовал метод расширения делегата InvokeShortCircuit, который вызывает все методы делегата и объединяет их возвращенные значения логической операцией (причем используя "сокращенное вычисление" - ну тоесть, если при & первый операнд == false, то тупо возващается false, а при | - наоборот), но так пользовательские наследники делегата имеют каждый свои входные параметры, чтобы не использовать DynamicInvoke (вообще не очень dynamic люблю =), решил воспользоваться лямбдой, в которой принимаемый делегат приводится к нужному потомку и, соответственно, выполняется.
Правда x.ManagementContract.FirstOrDefault(y => y.IsActual) айайай 2 раза выполняется)
Но ладно, у тебя еще все почти прозрачно. Вот, к примеру, один из последних моих перлов:
Хрен кто догадается!
Дык ведь почему оно два раза выполняется? А потому, что блятский Predicate.And принимает в параметр тип Expression - т.е. тупо одно выражение, т.е. нельзя туда запихнуть функцию (даже анонимную, если в ней более одной строки), иначе Linq-2-Sql выплюнет рантайм-эксепшн. Ну оно и понятно, потому что эта хрень потом должна как-то преобразовываться в SQL-запрос)) Вот я и извращаюсь, чтобы всё впихнуть в одно выражение. Может конечно, есть какие-то обходные варианты, но мне они не известны.
А твоё я не догадался что делает =) По крайней мере без конекста. Но красоту оценил хД
Мой пример:
beforePeakChange - это тип делегата - public delegate bool beforePeakChange(PeakDB Sender, int Index, ref Peak NewPeak);
BeforePeakChange - переменная этого типа
Так как делегат может быть множественным, но при этом возвращает значение, я организовал метод расширения делегата InvokeShortCircuit, который вызывает все методы делегата и объединяет их возвращенные значения логической операцией (причем используя "сокращенное вычисление" - ну тоесть, если при & первый операнд == false, то тупо возващается false, а при | - наоборот), но так пользовательские наследники делегата имеют каждый свои входные параметры, чтобы не использовать DynamicInvoke (вообще не очень dynamic люблю =), решил воспользоваться лямбдой, в которой принимаемый делегат приводится к нужному потомку и, соответственно, выполняется.