2014-01-22 2 views
0
return db.Orders.Where(o => o.Customer == User.Identity.Name); 

Откуда: o? Иногда я вижу, что эта форма используется с другими буквами, такими как c? Можно ли это заменить? Откуда: User.Identity.Name?ASP.NET Entity Framework DB запрос синтаксиса

+0

Это не относится к объекту. Сделайте поиск по лямбда-выражениям. Вот что это. Но это в основном просто функция. «O» - это то, что вы переходите в функцию. –

+0

См. Этот [родственный вопрос] (http://math.stackexchange.com/q/646238). –

ответ

1

Это известно как Lambda Expression

С помощью лямбда-выражения, вы можете написать локальные функции, которые могут быть переданы в качестве аргументов или возвращенные в качестве значения вызова функции.

В вашем случае, вы используете

db.Orders.Where(o => o.Customer == User.Identity.Name); 

На месте o вы можете использовать любой символ, который вы хотите, и этот персонаж будет вести себя, как, например типа коллекции, т.е.. здесь вы используете коллекцию Orders, поэтому o будет вести себя как пример класса Order.

4

Откуда берутся?

Where принимает делегата Func, который принимает экземпляр любого типа сбора, который вы используете. В этом случае это будет Func<Order, bool>. Ваш оператор Lambda объявляет анонимную функцию, которая соответствует делегату. o - это просто вход Order. Вы можете назвать его как хотите. Если вы написали свою функцию в долгосрочной стороны, это будет выглядеть примерно так:

public bool AnonymousFunction(Order o) 
{ 
    return o.Customer == User.Identity.Name; 
} 

Если вы запрашиваете с помощью LINQ к объектам, этот делегат будет вызываться для каждого из элементов, чтобы найти те, в коллекция, которая соответствует. Если вы запрашиваете LINQ to SQL (или какой-либо другой поставщик запросов), ваш делегат будет преобразован в дерево выражений, которое будет использоваться для генерации фактического синтаксиса запроса.

Откуда у пользователя User.Identity.Name?

Я предполагаю, что вы находитесь в каком-то веб-приложении и User.Identity вытаскивает зарегистрированные данные пользователя из токена аутентификации форм.

2

Оператор => используется для определения инструкции лямбда - по существу встроенная функция. Это встроенный эквивалент:

public bool Myfunc(Order o) 
{ 
    return o.Customer == User.Identity.Name; 
} 

типа из o выводится из параметра типа из Func перешедшей в Where. В этом случае тип будет Order, так как IEnumerable<Order>.Where() принимает Func<Order, bool> с Order в качестве входа и bool в качестве выходного.

Фактическое письмо не является матерным. Хорошим соглашением является использование идентификатора, который относится к типу источника, поэтому o или order будет хорошим выбором.

User, вероятно, является свойством класса, в котором находится функция (т. Е. Page), и User.Identity.Name - это имя идентификатора, связанного с пользователем.

0

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

Вы получаете доступ к таблице заказа, написав db.Orders Тогда вы миритесь состоянием на столе с помощью Where

Внутри Where вы указать состояние. Это делается с использованием лямбда-выражения. Лямбда-выражение - не что иное, как способ сказать, что я буду называть каждую строку как o (или может быть что угодно, это могут быть x, y, abc, что угодно, просто имя) и для этого (=>) проверить, если o.Клиент равен текущему в системе Пользователю.

Если да, верните мне все строки, соответствующие этому условию.

Смежные вопросы