【问题标题】:INCLUDE in Linq but to include only some columns from the included object在 Linq 中包含但仅包含所包含对象中的一些列
【发布时间】:2016-06-26 18:42:22
【问题描述】:

我有一个 c# Asp.Net Web API 服务器 我发出帖子请求以获取 Json 响应

我正在使用 Linq 并且有 2 个表:

首先是一个forumMessage,每条消息都指向具有accountId的特定用户:

public partial class forumMessage
{
    public int objectId { get; set; }        
    public string title { get; set; }
    public string body { get; set; }


    public int acountId { get; set; }//the user objectId
    public virtual user user { get; set; }
}

其次是用户:

public partial class user
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public user()
    {
        this.fora = new HashSet<forumMessage>();
    }

    public int objectId { get; set; }
    public string username { get; set; }
    public string password { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<forumMessage> fora { get; set; }//list of messages
}

所以我需要响应一个 json 数组,例如:

[{
"$id": "1",
"objectId": 2,
"title": "Message Title",
"body": "Message body",
"acountId": 1,
"user": {
    "$id": "2",
    "objectId": 1,
    "username": "Shay"
}}]

请注意,响应是没有用户密码或消息的用户列表 只是一些特定的用户列 谢谢

【问题讨论】:

    标签: asp.net linq rest c#-4.0


    【解决方案1】:

    您应该将您的域/业务对象 (forumMessage) 转换为 DTO

    看看this

    【讨论】:

      【解决方案2】:

      Include 返回所有内容,但您可以使用匿名对象仅返回数据子集:

       from c in ctx.Customers
       join o in ctx.Orders on ..
       select new { c.ID, c.Name, o.OrderID, o.OrderDate };
      

      粗略的例子,但想法是匿名对象定义子集,您可以将该对象编码为 JSON。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        相关资源
        最近更新 更多