C# c lambda获取FirstOrDefault属性(如果该属性不为null)

C# c lambda获取FirstOrDefault属性(如果该属性不为null),c#,lambda,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>().Fir

我需要检查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();

有更好的方法吗?

您可以在FirstOrDefault上使用null传播运算符:


对于C<6.0,您可以这样做:

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

否则,可以使用Null条件运算符?操作符before.Name

由于有人提到了多个属性,我将在其中添加此属性,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();

@Balaguruntanmarimuthu再次强调,这不是重复。不要抛出不是问题答案的重复项。这看起来像是自定义实现的外部联接。您可以考虑阅读。@ BalaururunaMalimuthu DuBLIDU您提供的不回答我的问题,因为所有的答案提供相似的查询给MITEIT罚款得到一个属性,如何实现一些属性/?让它成为一些名字和年龄一些属性是单数的,对吗@un-lucky属性是复数。可能值得一提的是c版本要求-一些人出于各种原因一直使用不支持此功能的旧版本:尝试使用查找。。。而不是第一个默认值。。。如果可能的话,为什么?没有什么可找的。。。此代码执行它应该执行的操作。
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();