我有一个这样的课程
public class Product
{
public int Id {get;set;}
public string Name {get;set;}
public Category Category {get;set;}
}
现在我想用Linq查询List
var result = from p in products
select p;
我想要实现的是,如果结果为空,结果将设置默认类别。
我能做的就是这个
var result = from p in products
select new Product()
{
Id = p.Id,
Name = p.Name,
Category = p.Category ?? new Category()
}
但这需要我再次设置每个字段。 但这不是我想要的,因为我的真实世界实体有大约50个属性而不是3,我还必须重新编辑代码如果我将来添加另一个属性。 我在想什么更像是这样:
var result = from p in products
select p { Category = p.Category ?? new Category() };
但这不会编译。
就像我在构建产品时所做的那样:var product = new Product() { Category = new Category() };
我知道我可以这样做:
foreach (var p in result)
{
if(p.Category == null)
p.Category = new Category();
}
但我将结果传递给来电者,我现在不想通过我的产品进行检测。
答案 0 :(得分:2)
我不建议在Linq中这样做。您正在将业务逻辑(应该默认初始化空值)与DataAcess代码混合(获取产品)。
您是否可以自行更改产品类别。将“类别”属性修改为类似。
private Category _category
public Category Category
{
get
{
if (_category == null)
_category = new Category();
return _category;
}
set
{
_category = value;
}
}