c#lambda如果它不为null,则使用FirstOrDefault属性

时间:2017-07-03 10:04:09

标签: c# lambda

我需要检查FirstOrDefault()是否为null,如果不是,则取一些属性。我最好的选择是:

var results = Database.Set<Pizzas>().Select(x => new PizzaViewModel
{
    Base = Database.Set<Bases>().FirstOrDefault(y => y.Id == x.Base.Id) != null ? Database.Set<Bases>().FirstOrDefault(y => y.Id == x.Base.Id).Name : null
}).ToList();

有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

您可以在FirstOrDefault()上使用空传播运算符:

Base = Database.Set<Bases>().FirstOrDefault(y => y.Id == x.Base.Id)?.Name

答案 1 :(得分:3)

由于有人提到了多个属性我会添加它,let允许我们保留基数以便我们可以查询多个事物,而null传播运算符允许我们确保我们如果找不到基地,就不要破坏。

var bases = Database.Set<Bases>();
var results =
    (from pizza in Database.Set<Pizzas>()
    let pizzaBase = bases.FirstOrDefault(pizzaBase => pizzaBase.Id == pizza.Base.Id)
    select new PizzaViewModel {
        Base = pizzaBase?.Name,
        BaseIngredients = pizzaBase?.Ingredients
    }).ToList();

答案 2 :(得分:0)

你可以这样做C#&lt; 6.0:

Base = Database.Set<Bases>().Where(y => y.Id == x.Base.Id)
                            .Select(y=> y.Name).FirstOrDefault();

否则,您可以在?之前使用Null-Conditional Operator(.Name)运算符