在Linq中包含INCLUDE但仅包括所包含对象中的一些列

时间:2016-03-11 13:33:02

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

我有一个c#Asp.Net Web API服务器 我发帖要求让Json重新开始

我正在与Linq合作并有两张桌子:

首先是一个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"
}}]

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

您应该将域/业务obejct(forumMessage)转换为DTO

查看this