C#Web API DTO在MVC中组合了两个对象

时间:2016-01-13 11:39:47

标签: c# asp.net-mvc asp.net-web-api

我是C#和DTO的新手,我正在寻找一些编写方法的建议。基本上我有两个传输对象,成员和源。我想要实现的是显示来自特定来源的成员列表。

唯一的问题是我需要能够从SourceRef显示与SourceId关联的成员。因为我不想传递敏感的MemberID和SourceId所以每个都有一个引用ID,这就是我将如何在我的API中识别它们

会员对象

public class MemberObj
{
    public int memId { get; set; }
    public String memRef { get; set; }
    public String fName { get; set; }
    public String lName { get; set; }
    public String email { get; set; }
    public String detail { get; set; }
    public int sourceId { get; set; }
}

源对象

public class SourceObj
{
    public int sourceId { get; set; }
    public String sourceRef { get; set; }
}

所以我想去地址例如

http://..../api/Member/Source/{sourceRef}

并显示通过sourceRef

与sourceId关联的成员列表

我想出了这些方面的东西......

public IEnumerable<MemberObj> GetMem(String code)
    {
        var sc = db.Sources;
        var thisSrc = sc.Where(s => s.sourceRef == code).SingleOrDefault();


        return db.Members.Select(s => new MemberObj
        {
            memId = s.memId,
            firstName = s.firstName,
            lastName = s.lastName,
            email = s.emailAddress,
            memRef = s.memRef

          }).AsEnumerable().Where(s => s.sourceRef== thisSrc.sourceRef);

但这没有任何回报。

3 个答案:

答案 0 :(得分:1)

以下接受code作为sourceRef并返回ref对应的SourceID

从这里开始,它只会将所有成员过滤为仅匹配sourceID的成员。 (我没有附近的VS副本,所以语法可能会出来!如果只有Notepad ++有知识分子......)

public IEnumerable<MemberObj> GetMem(String code)
{
    int soureID = db.Sources.Where(s => s.sourceRef == code).SingleOrDefault().sourceID; //I'm assuming code is the source ref??

    //Insert and handle your sourceID == 0 checks here.
    //...

    return db.Members.Where(m => m.sourceId == sourceID);
}

答案 1 :(得分:1)

这应该有效:

public IEnumerable<MemberObj> GetMem(String code)
{
    var thisSrc = db.Sources
                    .Where(s => s.sourceRef == code)
                    .SingleOrDefault();

    if(thisSrc == null)
       return Enumerable.Empty<MemberObj>();

    return db.Members.Where(m => m.sourceId == thisSrc.sourceId);
}

请注意,当给定code时,您应该处理多个源的情况(SingleOrDefault在这种情况下会抛出异常。) 如果您确定不是这种情况,请改用FirstOrDefault

答案 2 :(得分:0)

刚刚进入哈姆雷特的答案,你可以做这样的事情来返回DTO而不是你的会员实体:

  +geom_hline( size = 1, aes(yintercept = 4.5,linetype = "y = 4.5"))