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 行。(它没有改变结果,但我已经删除了,以便您清楚地看到我的表格)
如果所有这些项目确实不为空,则可以使用空条件运算符。它比空检查更干净,IMO:
products.Where(p => p.NameEnglish?.Contains(searchedData) == true);
Run Code Online (Sandbox Code Playgroud)
同样对于NameItalian.
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |