Если вам нужно присоединиться и фильтровать что-то, что можно сделать за пределами соединения. Фильтр можно сделать после создания коллекции.
В этом случае, если я это сделаю в условии соединения, я уменьшу возвращаемые строки.
Используется тернарное условие (= n == null ? "__" : n.MonDayNote,)
null
(поэтому нет совпадений), верните то, что после ?
. __
, в этом случае. :
, n.MonDayNote
. Спасибо другим участникам, где я начал с моей собственной проблемы.
var schedLocations = (from f in db.RAMS_REVENUE_LOCATIONS
join n in db.RAMS_LOCATION_PLANNED_MANNING on f.revenueCenterID equals
n.revenueCenterID into lm
from n in lm.DefaultIfEmpty()
join r in db.RAMS_LOCATION_SCHED_NOTE on f.revenueCenterID equals r.revenueCenterID
into locnotes
from r in locnotes.DefaultIfEmpty()
where f.LocID == nLocID && f.In_Use == true && f.revenueCenterID > 1000
orderby f.Areano ascending, f.Locname ascending
select new
{
Facname = f.Locname,
f.Areano,
f.revenueCenterID,
f.Locabbrev,
// MonNote = n == null ? "__" : n.MonDayNote,
MonNote = n == null ? "__" : n.MonDayNote,
TueNote = n == null ? "__" : n.TueDayNote,
WedNote = n == null ? "__" : n.WedDayNote,
ThuNote = n == null ? "__" : n.ThuDayNote,
FriNote = n == null ? "__" : n.FriDayNote,
SatNote = n == null ? "__" : n.SatDayNote,
SunNote = n == null ? "__" : n.SunDayNote,
MonEmpNbr = n == null ? 0 : n.MonEmpNbr,
TueEmpNbr = n == null ? 0 : n.TueEmpNbr,
WedEmpNbr = n == null ? 0 : n.WedEmpNbr,
ThuEmpNbr = n == null ? 0 : n.ThuEmpNbr,
FriEmpNbr = n == null ? 0 : n.FriEmpNbr,
SatEmpNbr = n == null ? 0 : n.SatEmpNbr,
SunEmpNbr = n == null ? 0 : n.SunEmpNbr,
SchedMondayDate = n == null ? dMon : n.MondaySchedDate,
LocNotes = r == null ? "Notes: N/A" : r.LocationNote
}).ToList();
Func<int, string> LambdaManning = (x) => { return x == 0 ? "" : "Manning:" + x.ToString(); };
DataTable dt_ScheduleMaster = PsuedoSchedule.Tables["ScheduleMasterWithNotes"];
var schedLocations2 = schedLocations.Where(x => x.SchedMondayDate == dMon);
Я использую [NSException raise:format:]
следующим образом:
[NSException raise:@"Invalid foo value" format:@"foo of %d is invalid", foo];
Я думаю, чтобы быть последовательным, более хорошо использовать @throw с Вашим собственным классом, который расширяет NSException. Затем Вы используете те же нотации для выгоды попытки наконец:
@try {
.....
}
@catch{
...
}
@finally{
...
}
Apple объясняет здесь, как бросить и обработать исключения: Захватывающие Исключения Выдающий исключения
Предостережение здесь. В Objective C, в отличие от многих подобных языков, обычно необходимо стараться не использовать исключения для ситуаций с распространенной ошибкой, которые могут произойти в нормальном функционировании.
документация Apple для Obj-C 2.0 указывает следующее: "Важный: Исключения являются ресурсоемкими в Objective C. Вы не должны использовать исключения для общего управления потоком, или просто показать ошибки (такие как файл, не являющийся доступным)"
, концептуальная документация Обработки исключений Apple объясняет то же, но с большим количеством слов: "Важный: необходимо зарезервировать использование исключений для программных ошибок или непредвиденных ошибок выполнения такой как за пределы доступ набора, попытки видоизменить неизменные объекты, отправив недопустимое сообщение, и теряя соединение с сервером окна. Вы обычно заботитесь об этих видах ошибок за исключениями, когда приложение создается, а не во времени выполнения. [.....] Вместо исключений, ошибочные объекты (NSError) и механизм ошибочной доставки Какао являются рекомендуемым способом передать ожидаемые погрешности в приложениях Какао".
причины этого состоят в том, чтобы частично придерживаться программирования идиом в Objective C (использующий возвращаемые значения в простых случаях и параметрами ссылки (часто класс NSError) в более сложных случаях), частично тот бросок и ловля исключений являются намного более дорогими и наконец (и perpaps самое главное), что исключениями Objective C является тонкая обертка вокруг C setjmp () и longjmp (), функции, по существу портя Вашу тщательную обработку памяти, видят это объяснение .
У меня нет представителя, который бы прокомментировал ответ eJames, так что, думаю, мне нужно поместить сюда свой. Тем, кто работает с Java, вы должны помнить, что Java различает Exception и RuntimeException. Exception - это отмеченное исключение, а RuntimeException не отмечено. В частности, Java предлагает использовать проверенные исключения для «нормальных условий ошибки» и непроверенные исключения для «ошибок времени выполнения, вызванных ошибкой программиста». Кажется, что исключения Objective-C следует использовать в тех же местах, где вы бы использовали непроверенное исключение, а возвращаемые значения кода ошибки или значения NSError предпочтительнее там, где вы бы использовали проверенное исключение.
Я считаю, что вы никогда не должны использовать Исключения для управления нормальным потоком программы. Но исключения должны выдаваться всякий раз, когда какое-либо значение не соответствует желаемому.
Например, если какая-то функция принимает значение, и это значение никогда не может быть нулевым, тогда можно выбросить исключение, а не пытаться сделать что-то "умное" ...
Рис
Начиная с ObjC 2.0, исключения Objective-C больше не являются оболочкой для C setjmp () longjmp () и совместимы с исключениями C ++, @try является «бесплатным», но генерирование и перехват исключений намного дороже.
В любом случае утверждения (с использованием семейства макросов NSAssert и NSCAssert) генерируют NSException, и это разумно использовать их как состояния Райса.
AS
ключевое слово в операторе SELECT? – diEcho 9 May 2013 в 16:45