C# Declare variable in lambda expression

后端 未结 3 541
轮回少年
轮回少年 2021-01-04 03:53

I want to do a simple lambda expression like this:

IList list = GetSomeList();

MyEntity1 result = list.SingleOrDefault(         


        
相关标签:
3条回答
  • 2021-01-04 04:30

    If you want to use the "query comprehension" syntactic form you can do this:

    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();
    

    Note also that the middle "where" clause might not be necessary. If "entity2.Id" is a nullable int then it will be correctly checked for null by the lifted > operator.

    0 讨论(0)
  • 2021-01-04 04:34

    Well, first off, are you trying to use this in linq to sql / entity framework / other?

    If not, then just do this

    list.SingleOrDefault(e => {
       var entity = GetMyEntity2(e);
    
       return entity != null && entity.Id != null && entity.Id > 0;
    });
    
    0 讨论(0)
  • 2021-01-04 04:35

    You can use the Select operator:

    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);
    

    Or, since you're not even using the Item after pushing it through GetMyEntity2 you could just have:

    MyEntity1 result = list
        .Select(x => GetMyEntity2(x))    
        .SingleOrDefault(x => x != null && x.Id != null && x.Id > 0);
    
    0 讨论(0)
提交回复
热议问题