我有2节课。我首先在现有数据库中使用EF代码。
public class Asset
{
[Key]
public decimal AssetId { get; set; }
[StringLength(20)]
public string AssetNumber { get; set; }
public decimal? DistrictId { get; set; }
public virtual District District { get; set; }
}
public class District
{
[Key]
public decimal? DistrictId { get; set; }
[StringLength(20)]
public string DistrictCode { get; set; }
[StringLength(255)]
public string Description { get; set; }
public virtual ICollection<Asset> Assets { get; set; }
}
我需要获取DistrictId不为空的资产列表。
我正在使用以下c#代码:
IQueryable<CustomClass> assets = dbContext.Assets
.Where(a => a.DistrictId != null)
.Select(a => new CustomClass
{
});
我相信使用导航属性,你不需要明确地说 - Where(a =&gt; a.DistrictId!= null)。我不确定。因此,您能否建议获取DIstrictId不为空的资产列表的更好方法是什么。
谢谢,
答案 0 :(得分:0)
由于您直接查询资产,因此您实际上并未使用资产&lt; - &gt;区域关系。
如果您尝试获取包含区域的资产列表,或区域及其资产列表,您将使用导航属性。
对于你想要获得的结果,正如HaukurHaf在评论中所说的那样,你所做的是最直接的方法。
答案 1 :(得分:0)
尽可能直截了当,请注意DistrictID
仅定义关系,而不是导航属性District
。
验证你可以做到
// Eager loading all District properties and then filtering
List<CustomClass> assets = dbContext.Assets
.Include(a => a.District)
.ToList()
.Where(a => a.District != null)
.Select(a => new CustomClass {})
.ToList();
// Your initial query.
List<CustomClass> assets2 = dbContext.Assets
.Where(a => a.DistrictID != null)
.Select(a => new CustomClass {})
.ToList();
你会发现他们最终都有相同的名单。