C# - 首先使用EF代码获取数据 - DbContext

时间:2017-06-12 21:45:17

标签: c# entity-framework

我有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不为空的资产列表的更好方法是什么。

谢谢,

2 个答案:

答案 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();

你会发现他们最终都有相同的名单。