一些常用的字段属性,可以提取出来作为一个类,然后在其他实体中作为一个属性。比如我们的个人地址,通常包括街区、城市、省份、邮编等,那么我们可以将这些东西抽取出来作为一个类:
[ComplexType]
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string Province { get; set; }
public string Zip { get; set; }
}
有了上面的这个类,我们就可以在其他地方应用了,比如公司地址、住宅地址:
public class Company
{
public Company()
{
Address = new Address();
}
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public Address Address { get; set; }
}
枚举在EF中也用到,比如一个会员账号的状态,有激活、未激活、未知三种状态,那么我们就可以定义成一个枚举类型:
public enum AccountState
{
Active,
Inactive,
Unknown
}
然后在会员类中我们就可以使用该枚举:
public class Account
{
public AccountState AccountState { get; set; }
}
在查找条件中,我们也可以直接引用:
var a = context.Account.Where(p => p.AccountState == AccountState.Inactive);
Select的使用,可以挑选一些属性出来的:
public AccountController()
{
var people = context.People
.Where(p => p.PersonState == PersonState.Active)
.OrderBy(p => p.LastName)
.ThenBy(p => p.FirstName)
.Select(p => new
{
p.LastName,
p.FirstName,
p.PersonType.TypeName
});
foreach (var person in people)
{
Console.WriteLine("{0} {1} {2}",
person.FirstName, person.LastName, person.TypeName);
}
}
一些其他的方法:
- Count:计算记录的数量
- Sum:计算列的和
- Min:计算最小值
- Max:计算最大值
- Average:计算平均值
例如:
//获取生日最小的
var min = context.People.Min(p => p.BirthDate);
//统计激活状态的会员人数
var count = context.People.Count(p => p.PersonState == PersonState.Active);
//还可以统计导航属性的个数,例如计算每个账号的手机数量
var people = context.People
.Select(p => new
{
p.LastName,
p.FirstName,
p.Phones.Count
});
//计算升高的总和
var sum = query.Sum(p => p.HeightInFeet);
分页查找:
var people = context.People
.OrderBy(p => p.LastName)
.Skip((criteria.PageNumber - 1) * criteria.PageSize)
.Take(criteria.PageSize);
日期比较:
csharpcsharpm => m.IP == ip && System.Data.Entity.DbFunctions.DiffDays(m.AddTime, DateTime.Now) == 0
Join的使用。
Previous: 10节-实体属性类型和表字段类型
Next: 12节-Join的使用