C # объявить переменную в лямбда-выражении
14114 просмотра
3 ответа
Я хочу сделать простое лямбда-выражение вроде этого:
IList<MyEntity1> list = GetSomeList();
MyEntity1 result = list.SingleOrDefault<MyEntityList>(
e => GetMyEntity2(e) != null && GetMyEntity2(e).Id != null && GetMyEntity2(e).Id > 0
);
Это прекрасно работает, но получить MyEntity2 из MyEntity1 не так просто, поэтому я хотел бы объявить переменную в лямбда-выражении, чтобы сохранить MyEntity2 и использовать его, вместо того, чтобы снова и снова вызывать метод GetMyEntity2. Это возможно?
Примечание: код является лишь примером, который отражает мой реальный случай.
Спасибо!
Автор: Diego Источник Размещён: 12.11.2019 09:29Ответы (3)
32 плюса
Ну, во-первых, вы пытаетесь использовать это в linq to sql / entity Framework / other?
Если нет, то просто сделай это
list.SingleOrDefault(e => {
var entity = GetMyEntity2(e);
return entity != null && entity.Id != null && entity.Id > 0;
});
Автор: Darren Kopp
Размещён: 15.06.2011 07:52
8 плюса
Если вы хотите использовать синтаксическую форму «понимание запросов», вы можете сделать это:
var query = from entity1 in list
let entity2 = GetMyEntity2(entity1)
where entity2 != null
where entity2.Id != null
where entity2.Id > 0
select entity1;
var result = query.SingleOrDefault();
Также обратите внимание, что в среднем предложении «где» может не быть необходимости. Если «entity2.Id» является обнуляемым int, то он будет корректно проверен на нулевое значение >
оператором поднял .
5 плюса
Вы можете использовать Select
оператор:
IList<MyEntity1> list = GetSomeList();
MyEntity1 result = list
.Select(x => new { Item = x, Entity2 = GetMyEntity2(x) })
.SingleOrDefault(x => x.Entity2 != null && x.Entity2.Id != null && x.Entity2.Id > 0);
Или, так как вы даже не используете Item
после его проталкивания, GetMyEntity2
вы можете просто иметь:
MyEntity1 result = list
.Select(x => GetMyEntity2(x))
.SingleOrDefault(x => x != null && x.Id != null && x.Id > 0);
Автор: Kirk Woll
Размещён: 15.06.2011 07:55
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- linq LINQ-запрос к DataTable
- linq Условные запросы Linq
- linq Конфликт данных в LINQ
- linq Есть ли способ переопределить пустой конструктор в классе, сгенерированном LINQtoSQL?
- linq Отладка LINQ to SQL SubmitChanges ()
- linq Могу ли я вернуть поле 'id' после вставки LINQ?
- lambda Что такое лямбда (функция)?
- lambda Что предпочтительнее использовать в Python: лямбда-функции или вложенные функции ('def')?
- lambda C # Лямбда-выражения: зачем их использовать?
- lambda В чем разница между «закрытием» и «лямбдой»?
- lambda Завершение хронометража секундомера с делегатом или лямбдой?
- lambda Лямбда-функция для классов в python?