【问题标题】:Return only certain columns to JSON in LINQ仅将某些列返回到 LINQ 中的 JSON
【发布时间】:2014-01-16 19:10:17
【问题描述】:

我不想在 JSON 中返回整个表。我只想要以下列:ProjectContactFirstNameProjectContactLastName,但我没有尝试任何工作。这是我的代码:

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

【问题讨论】:

  • 这里用.ToArray代替.ToList,效率更高。

标签: c# asp.net json linq


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    使用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()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 2014-09-05
      • 1970-01-01
      • 2018-02-16
      • 2018-01-04
      相关资源
      最近更新 更多