如何通过Foreach

时间:2017-02-06 06:06:28

标签: c# wcf

我在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里面有数据。我想当我想要将记录从字符串一个接一个地插入列表时,问题开始出现。有个主意吗?

1 个答案:

答案 0 :(得分:0)

我得到了解决问题的方法。我需要在循环中实现我的类。只需在foreach中添加presales = new Presid();

原因:

Class是一个对象。实例化时,将创建一个新对象。当你实例化外部foreach循环时,它将创建一个对象,并在循环中分配给同一个对象,直到循环结束。这意味着当循环执行时,您的前一个值将被清除。在列表中,您反复添加相同的对象,但每次都会覆盖对象内的值。 但是当您在循环内实例化时,将为每个循环创建新对象,因此您将值分配给此新对象。此对象已添加到列表中。因此,当您访问列表时,它将包含类的对象数,该对象的数量等于循环的计数,并且每个对象包含您在循环中分配的单独值。