List.Where("string".Contains()) 在 LINQ 查询中返回 NULL

Bur*_*rak 0 .net c# linq entity-framework

我的Product班级:

public class Product {
 public int Id { get; set; }
 public string NameEnglish { get; set; }
 public string NameItalian { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的Language班级:

public class Language{
  public int Id { get; set; }
  public string LanguageType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个使用“名称”属性在产品中搜索并返回的方法List<Product>

List<Product> GetProductsFromSearch(int languageId, string searchedData){
    var products = _contex.Products.ToList();
    switch(languageId) //LanguageId 1 = English , LangaugeId 2 = Italian
    {
       case 1:
            return products.Where(i=>i.NameEnglish.Contains(searchedData)).ToList();
       case 2:
            return products.Where(i=>i.NameItalian.Contains(searchedData)).ToList();
       default:
            return products;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,某些产品的“English”或“Italian”名称字段尚未在 Db 中分配,因此这些是字段。

并且程序给出错误“对象引用未设置到对象的实例”。

所以我添加了一个额外的控件:

return products.Where(i=> !string.isNullOrEmpty(i.NameEnglish) && 

                          i.NameEnglish.Contains(searchedData)).ToList()
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到同样的错误。有人可以帮忙吗?我糊涂了,它不应该通过场?

注意: 我知道我应该直接过滤,_context.Products.Where(i=>i.NameEnglish.Contains(searchedData)).ToList(); 但这是为了我的测试目的,我试图在“列表”类型中使用“Where”。

Id | NameEnglish | NameItalian
1  | Ball        | Palla
2  | Phone       | Telefono
3  | Tshirt      | NULL
4  | NULL        | Bicchiere
Run Code Online (Sandbox Code Playgroud)

注意:我有 12 行,现在有 4 行。(它没有改变结果,但我已经删除了,以便您清楚地看到我的表格)

Mat*_*t U 6

如果所有这些项目确实不为空,则可以使用空条件运算符。它比空检查更干净,IMO:

products.Where(p => p.NameEnglish?.Contains(searchedData) == true);
Run Code Online (Sandbox Code Playgroud)

同样对于NameItalian.