Я знаю то, что делает этот код, но я не уверен в синтаксисе. Это, кажется, не соответствует "стандартному" формату. Это - главным образом LINQ?
return db.Subjects.SingleOrDefault(s => s.ID == ID);
Первая часть имеет смысл, но это - часть в скобках, которые я не понимаю. Как мы можем использовать s
не объявляя это? И как мы помещаем логику в вызов метода?
Первая часть имеет смысл, но это часть в скобках, которых я не понимаю.
Что вы видите здесь, - это выражение лямбда . Это очень особенный анонимный делегат.
Это в основном в основном Linq?
перечисление. Singleordefault
- это метод LINQ, но лямбдас - это нечто зависимо от Linq; Они просто делают LINQ невероятно более дружелюбнее, чем в противном случае он был бы.
Теперь, чтобы получить конкретные IENumerable
Возвращает уникальный экземпляр субъекта
в IENumerable < Тема>
, который соответствует предикату S => S.ID == ID
или он возвращает NULL
, если нет такого экземпляра. Это бросает исключение, если есть более одного такого экземпляра. При компиляционном времени S => S.ID == ID
переводится в полноценный делегат Eats объекты типа объекта
и возвращает bool
, что True
If, если и только тогда, когда S.ID
равно ID
.
Как мы можем использовать
S
, не объявляя его?
=>
- это лямбда . Он в основном отделяет левую часть лямбда выражения с правой стороны. Левая сторона - это входные переменные. Это эквивалентно списку параметров в явно определенном методе. То есть S
в лямбдейском выражении играет роль s
ниже:
public bool Predicate(Subject s)
Это просто то, что вам не нужно объявлять тип S
как Компилятор будет выводит это.
правая сторона лямбда тела. Это эквивалентно телу ниже
public bool Predicate(Subject s) {
return s.ID == ID;
}
, что еще больше, вам не нужно объявлять тип возврата; Компилятор будет выводит это.
Итак, в конце концов, как будто вы сделали следующее:
class MyPredicate {
public string ID;
public bool Predicate(Subject s) {
return s.ID == this.ID;
}
}
, то:
// elements is IEnumerable<Subject>
// ID is string
MyPredicate predicate = new MyPredicate();
predicate.ID = ID;
elements.SingleOrDefault(predicate.Predicate);
Приятная вещь - это компилятор просто автоматически выходит для вас, когда вы используете выражение лямба.
S до => объявляет переменную с типом элемента структуры (тип, содержащийся в переменной субъекты редактирование: другие функции работают с большим количеством аргументов, то есть. Присоединяйтесь к ) Правая часть (после =>). Логика исходит от функции. Если вы позвоните в TontyOdefault (поиск в документах), он вернет один элемент, если удовлетворяют условию или нулю. В Linq есть много функций, которые вы можете использовать (т. Е. Сначала (), где (), ...). Надеюсь, это поможет.
Я думаю, что ваша путаница лежит вокруг выражения S => S.ID == ID
. Это лямбда выражение. Это простые термины Это способ определения встроенной функции.
В этом случае текст на левую сторону =>
- список аргументов. Так что S объявлен в силу в этом положении. Правая сторона =>
- это выполненное выражение. В этом конкретном контексте лямбда будет работать на каждом элементе в коллекции, и код будет утверждать, что есть одно значение, которое соответствует выражению, выполненному лямбду.
Это называется лямбда выражением. Смотрите здесь для объяснения. лямбда выражения (C # Руководство по программированию)
На сайте ниже я нашел несколько возможных решений.
http://social.msdn.microsoft.com/Forums/en/vsdebug/thread/e9c5da47-a194-4051-a3d5-28b404263b3f
Наилучшим способом было запустить Internet Explorer Затем перейдите на вкладку Сервис - > Свойства обозревателя - > Дополнительно - > раздел Безопасность, снимите флажок «Проверка отзыва сертификата издателя»
-121--4409613-Попробуйте в приложении получить часовой пояс по умолчанию или установите часовой пояс вручную (строка с комментариями).
Небольшой мой пример:
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Locale locale = Locale.getDefault();
TimeZone localTimeZone = TimeZone.getDefault();
//TimeZone localTimeZone = TimeZone.getTimeZone("Australia/Sydney");
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, locale);
dateFormat.setTimeZone(localTimeZone);
Date rightNow = new Date();
System.out.println(locale.toString() + ": " + dateFormat.format(rightNow));
}
}
-121--2913825- Это компилятор C # 3.0, работающий над магией для вас.
Эта инструкция компилируется в делегат и эквивалентна:
return db.Subjects.SingleOrDefault(delegate(s) { return s.ID == ID });
Она называется лямбда-выражением, так как нет необходимости формально объявлять параметры, они выводятся компилятором C #.