如何从EF中的表中选择一些字段

13 asp.net-mvc lambda entity-framework entity-framework-4.1 asp.net-mvc-3

我在数据库中有一个包含9列的表,如果需要,我希望能够只加载它的一些字段.

我如何使用Entity Framework 4做到这一点?

例如,我的表有以下字段:

ID, FirstName, LastName, FotherName, BirthDate, Mobile, Email
Run Code Online (Sandbox Code Playgroud)

我希望能够只获取这些列:

ID, FirstName, LastName
Run Code Online (Sandbox Code Playgroud)

我的项目是一个ASP.NET MVC 3应用程序,用SQLServer 2008 ExpressEF 4.1.

jav*_*iry 29

假设您有一个包含此模型的表:

public class User{
    public int ID {get; set;}
    public string NickName {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string FotherName {get; set;}
    public DateTime BirthDate {get; set;}
    public string Mobile {get; set;}
    public string Email {get; set;}
    public string Password {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

现在,你要取刚ID,FirstName,LastName,和FotherName.你可以用2种方式做到这一点; 第一种方法是将它们作为anonymous对象获取,看看:

var user = entityContext.Users.Where(u => u.ID == id)
    .Select(u => new {
        ID = u.ID,
        FirstName = u.FirstName,
        LastName = u.LastName,
        FotherName = u.FotherName
    }).Single();
Run Code Online (Sandbox Code Playgroud)

现在,您的返回值类型是anonymous,您可以使用它,例如:

var i = user.ID;
// or
var s = user.FirstName;
Run Code Online (Sandbox Code Playgroud)

以另一种方式(例如,当你想传递的对象作为模型视图),可以定义一个新的类,(即UserViewModel),当您选择的对象,选择它作为一个UserViewModel.看:

public class UserViewModel{
    public int ID {get; set;}
    public string NickName {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public string FotherName {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

并在查询中,采取这个:

var user = entityContext.Users.Where(u => u.ID == id)
    .Select(u => new UserViewModel {
        ID = u.ID,
        FirstName = u.FirstName,
        LastName = u.LastName,
        FotherName = u.FotherName
    }).Single();
Run Code Online (Sandbox Code Playgroud)

看看他们之间只有一个区别,在labda表达式中,而不是u => new {} 我们正在使用u => new UserViewModel{}.祝好运.