I want to do a simple lambda expression like this:
IList list = GetSomeList();
MyEntity1 result = list.SingleOrDefault(
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.
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;
});
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);