Это возвращает логическое значение, основанное на наличии или некорректных идентификаторов.Что на самом деле происходит с IQueryable.Where()?
from t in getAll
select new Result
{
...
bool DetailsAvailable =
(db.SaveTrackings.Where(s => s.BundleID == t.bundleID
&& s.UserID == t.userID)
.Count() > 0) ? true : false;
}
Это то, что я думаю, что понимаю: .Where()
возвращается все записи с идентификаторами соответствия, а затем .Count()
просто увидеть, сколько там. Я чувствую, что понимаю, что нам нужно s
.
Я знаю, чего ожидать от этого кода, так как он был в использовании. Я просто не понимаю, как это работает, а часть документации из MSDN использует некоторую терминологию, которая меня сбивает с толку.
Все выражения лямбда использовать оператор лямбда =>, который читается как «идет к». В левой части оператора лямбда указаны параметры ввода (если есть), а правая сторона имеет выражение или оператор блок. Выражение лямбда x => x * x читается «x переходит в x раз x».
Итак, как я полагаю, чтобы понять, что означает, что мой код, основанный на этом, .Where(s
«идет в» s.BundleID == t.BundleID
...), так что здесь происходит? Что означает «идет»? Является ли сравнение каждого ID в s
всем, доступным в t
? Как я понимаю, почему это называется «идет» и что именно происходит?
И тогда она становится все более запутанной ...
В => оператор имеет такой же приоритет, что присваивания (=) и правоассоциативные.
Lambdas используются в методах LINQ запросов в качестве аргументов стандартного запроса методов оператора, таких как Where.
При использовании синтаксиса метода на основе для звонка Если метод в классе перечислимых (как это делается в LINQ к объектов и LINQ к XML) параметр является типом делегата System.Func. Выражение лямбда является наиболее удобным способом создания этого делегата.
Что такое тип делегата System.Func<T, TResult>
и как он создается с помощью этого оператора «идет»?
Я не могу просто использовать код, потому что знаю, что он работает, мне нужно понять, как/почему.
Если вам действительно нужно только истинное или ложное, возможно, было бы более эффективно использовать функцию Any, а не где + count? db.SaveTrackings.Any (тот же предикат) вернет true, как только один элемент будет правдой. –
@ Джон поблагодарил, если бы я мог понять, что происходит с этим целым делегатом/лямбдой, пытаясь окунуться в кусочки – BigOmega
, это займет немного времени, тогда он просто «щелкнет». самый простой способ - просто подумать о них как о мини-функциях без имен. синтаксис может быть немного странным, особенно без аргументов ...() => {blah blah blah} получает всех в первый раз. ЧТО ТАКОЕ ЧТО !!!: D –