C# 在LINQ中仅将某些列返回给JSON

C# 在LINQ中仅将某些列返回给JSON,c#,asp.net,json,linq,C#,Asp.net,Json,Linq,我不想返回JSON中的整个表。我只想要以下列:ProjectContactFirstName,ProjectContactLastName,但我尝试的都不起作用。这是我的密码: [WebMethod] public static string getProjectByID(int id) { using (dbPSREntities4 myEntities = new dbPSREntities4()) { var thisProject = myEntities

我不想返回JSON中的整个表。我只想要以下列:
ProjectContactFirstName
ProjectContactLastName
,但我尝试的都不起作用。这是我的密码:

[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!
    }
}
[WebMethod]
公共静态字符串getProjectByID(int id)
{
使用(dbPSREntities4 myenties=new dbPSREntities4())
{
var thisProject=myenties.tbProjects.Where(x=>x.projectd==id.ToList();
JavaScriptSerializer serializer=新的JavaScriptSerializer();
var json=serializer.Serialize(thisProject);

返回json;使用
选择
方法将项目实体投影到具有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;
     }
}
这种类型的投影有一个好处-它发生在数据库端,并且只有这两个字段将从数据库加载。匿名对象的序列化将为您提供在投影期间选择的列


顺便说一句,如果您是按id选择项目,可能需要使用
FirstOrDefault()
而不是
ToList()

使用
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;
     }
}
这种类型的投影有一个好处-它发生在数据库端,并且只有这两个字段将从数据库加载。匿名对象的序列化将为您提供在投影期间选择的列


顺便说一句,因此您要按id选择项目,可能需要使用
FirstOrDefault()
而不是
ToList()

在将对象传递给序列化程序之前,您必须过滤列:

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

在将对象传递给序列化程序之前,必须过滤列:

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

使用
.ToArray
而不是
.ToList
此处更有效。使用
.ToArray
而不是
.ToList
此处更有效。