我是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);
但这没有任何回报。
答案 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"))