我在WCF服务应用程序中编写了以下代码:
public List<Presid> GetPresalesIdList(string userlogin)
{
List<Presid> idsales = new List<Presid>();
Presid presales = new Presid();
string cmb = userdomain + userlogin;
InitializeCRMService(userName, passWord, domain);
try
{
if (!string.IsNullOrEmpty(userlogin))
{
QueryExpression qe = new QueryExpression("systemuser");
string[] cols = { "businessunitid", "domainname", "systemuserid" };
qe.Criteria = new FilterExpression();
qe.Criteria.AddCondition("domainname", ConditionOperator.Equal, cmb);
qe.ColumnSet = new ColumnSet(cols);
var guid = _service.RetrieveMultiple(qe);
userid = ((EntityReference)guid[0].Attributes["businessunitid"]).Id;
systemid = (Guid)guid[0].Attributes["systemuserid"];
QueryExpression query = new QueryExpression("opportunity");
string[] cols2 = { "new_presalesid", "ownerid" };
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("ownerid", ConditionOperator.Equal, systemid);
query.ColumnSet = new ColumnSet(cols2);
EntityCollection preid = _service.RetrieveMultiple(query);
foreach (Entity enty in preid.Entities)
{
presales.PresalesID = enty.GetAttributeValue<string>("new_presalesid");
idsales.Add(presales);
}
return idsales;
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return idsales;
}
但是当我测试此服务时,返回值(idsales
)为空。我的意思是,那里没有插入任何数据。问题是如何通过foreach循环添加列表值。
EDITED 以前,我没有使用此代码的数据合同,所以在List行中,我这样写:
public List<string> GetPresalesIdList(string userlogin)
{
List<string> idsales = new List<string>();
string cmb = userdomain + userlogin;
InitializeCRMService(userName, passWord, domain);
try {
foreach (Entity enty in preid.Entities)
{
idsales.Add(enty.GetAttributeValue<String>("new_presalesid"));
}
}
这些代码按预期工作。
使用数据合约后,我将List<String>
替换为List<Presid>
此数据合约代码:
[DataContract]
public class Presid
{
[DataMember]
public string PresalesID { get; set; }
}
EDITED
string tes = string.Empty;
foreach (Entity enty in preid.Entities)
{
tes = tes + enty.GetAttributeValue<string>("new_presalesid");
presales.PresalesID = tes;
idsales.Add(presales);
// idsales.Add(enty.GetAttributeValue<String>("new_presalesid"));
}
通过使用此代码,我可以看到presid.Entities里面有数据。我想当我想要将记录从字符串一个接一个地插入列表时,问题开始出现。有个主意吗?
答案 0 :(得分:0)
我得到了解决问题的方法。我需要在循环中实现我的类。只需在foreach中添加presales = new Presid();
。
原因:
Class是一个对象。实例化时,将创建一个新对象。当你实例化外部foreach循环时,它将创建一个对象,并在循环中分配给同一个对象,直到循环结束。这意味着当循环执行时,您的前一个值将被清除。在列表中,您反复添加相同的对象,但每次都会覆盖对象内的值。 但是当您在循环内实例化时,将为每个循环创建新对象,因此您将值分配给此新对象。此对象已添加到列表中。因此,当您访问列表时,它将包含类的对象数,该对象的数量等于循环的计数,并且每个对象包含您在循环中分配的单独值。