Asp.net-Mvc

如何從 EF 中的表中僅選擇某些欄位

  • November 30, 2017

我在數據庫中有一個包含 9 列的表,如果需要,我希望能夠只載入其中的一些欄位。

請問如何使用 Entity Framework 4 做到這一點?

例如我的表有這些欄位:

ID, FirstName, LastName, FotherName, BirthDate, Mobile, Email

我希望能夠只獲取這些列:

ID, FirstName, LastName

我的項目是一個ASP.NET MVC 3應用程序,帶有SQLServer 2008 ExpressEF 4.1.

假設您有一個帶有此模型的表:

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;}
}

現在,您只想獲取IDFirstNameLastNameFotherName。您可以通過 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();

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

var i = user.ID;
// or
var s = user.FirstName;

另一種方式(例如當您想將對像作為Model傳遞View時),您可以定義一個新類(即),當您選擇對象時,將其選擇為. 看: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;}
}

並在查詢中,採取這個:

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

看看它們之間只有一個區別,在 labda 表達式中,而不是我們u => new {} 使用u => new UserViewModel{}. 祝你好運。

引用自:https://stackoverflow.com/questions/7356180