2014-01-16 73 views
1

我不想在JSON中返回整個表。我只想要以下列:ProjectContactFirstNameProjectContactLastName但我沒有嘗試的作品。這裏是我的代碼:只返回LINQ中JSON的某些列

[WebMethod] 
public static string getProjectByID(int id) 
{ 
    using (dbPSREntities4 myEntities = new dbPSREntities4()) 
    { 
     var thisProject = myEntities.tbProjects.Where(x => x.ProjectID == id).ToList(); 

     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     var json = serializer.Serialize(thisProject); 

     return json; <--- here I need to say what columns to return but nothing will work. Thanks! 
    } 
} 
+0

使用'.ToArray',而不是'這裏.ToList',它是更有效的。 – danludwig

回答

3

你必須傳遞對象序列化之前過濾列:

[WebMethod] 
public static string getProjectByID(int id) 
{ 
    using (dbPSREntities4 myEntities = new dbPSREntities4()) 
    { 
     var thisProject = myEntities.tbProjects.Where(x => x.ProjectID == id); 

     var columns = thisProject.Select(x => new { x.ProjectContactFirstName, x.ProjectContactLastName }).ToList(); 

     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     var json = serializer.Serialize(columns); 

     return json; 
    } 
} 
1

使用Select方法對項目的項目單位與ProjectContactFirstName和ProjectContactLastName性能匿名對象:

[WebMethod] 
public static string getProjectByID(int id) 
{ 
    using (dbPSREntities4 myEntities = new dbPSREntities4()) 
    { 
     var thisProject = 
      myEntities.tbProjects 
         .Where(p => p.ProjectID == id) 
         .Select(p => new { 
          p.ProjectContactFirstName, 
          p.ProjectContactLastName 
         }).ToList(); 

     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     var json = serializer.Serialize(thisProject); 
     return json; 
    } 
} 

這種投影有一個好處 - 它發生在數據庫方面,和只有這兩個字段將從數據庫加載。匿名對象的序列化將爲您提供在投影過程中選擇的列。

順便說一句你選擇了項目編號,可能您需要使用FirstOrDefault()而不是ToList()

相關問題