C # объявить переменную в лямбда-выражении - PullRequest
13 голосов
/ 15 июня 2011

Я хочу сделать простое лямбда-выражение:MyEntity2 и используйте его, вместо того, чтобы снова и снова вызывать метод GetMyEntity2.Это возможно?

Примечание: Код является лишь примером, который отражает мой реальный случай.

Спасибо!

Ответы [ 3 ]

32 голосов
/ 15 июня 2011

Ну, во-первых, вы пытаетесь использовать это в linq to sql / entity Framework / other?

Если нет, то просто сделайте это

list.SingleOrDefault(e => {
   var entity = GetMyEntity2(e);

   return entity != null && entity.Id != null && entity.Id > 0;
});
8 голосов
/ 16 июня 2011

Если вы хотите использовать синтаксическую форму «понимание запросов», вы можете сделать это:

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" имеет значение null, то оно будет правильно проверено на нулевое значение с помощью оператора >.

5 голосов
/ 15 июня 2011

Вы можете использовать оператор 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...