2016-11-29 134 views
-3

我检索客户裁判的名单将其存储在一个字符串格式:列表对象比较

List<string> CustomerRefs(); //List of customer refs 

我通过

List<Customer> CustomersList = new List<Customer>(); 

foreach (string CustRef in CustomerRefs) 
{ 
    Customer c = new Customer(); 
    c.ref = CustRef; 
    CustomersList.Add(c); 
} 

客户添加到列表中,然后我要检查,如果我们我们的数据库已经有这个客户。如果没有,然后发送电子邮件。 CurrentCustomers是从我的数据库列表与我们目前的客户

   foreach (Customer cm in CustomersList) 
       { 
        if (!CurrentCustomers.Contains(cm)) 
        { 
         //Email someone 
        } 
       } 

现在列表中包含相同的裁判,但它仍然达到//Email someone线。

我对这可能发生的原因有一些想法,我认为它可能比较ID(总是0)或整个对象,并针对ref是我的目标。

那么有没有比较对象内的ref,或者我做了什么,最后我应该在我们的数据库中寻找客户,如果发现,将它添加到CustomersList并比较它?

请注意我已阅读MSDN,只需要一些澄清。也许我已经读了太多内容,目前看不清楚。

+1

这是*不是*你的代码 - 你有两个不同的变量,称为'c',并且你试图使用关键字('ref')作为标识符。如果你只提供伪代码,很难说出实际发生了什么。 –

+0

错字 - 修正。谁决定让我失望?你能解释为什么至少? – Computer

+2

我低估了你,因为问题不清楚。它*仍然*不清楚,它仍然*伪代码。我们不知道什么时候'CurrentCustomers'来自CustomerRefs,或者'Customer'是否覆盖'Equals'。请提供[mcve]。 –

回答

1

您不能使用Contains,因为您似乎在创建单独的对象实例,即使它们中的一些共享相同的ID,因此逻辑上表示“相同”的实体。

包含使用被比较的Customer单独实例的对象引用一个默认的相等比较,并没有返回true,即使在您的Customer对象具有相同的ID箱子。您需要比较ID值。为此,您可以使用the Any extension method

foreach (Customer cm in CustomersList) 
{ 
    if (!CurrentCustomers.Any((x) => x.ID == cm.ID)) 
    { 
     //Email someone 
    } 
} 

不过,这个问题可能会带来更大的问题。如果您有逻辑上代表“相同”对象的单独对象实例(例如,基于唯一ID),则可能会遇到问题。我会建议只维护每个对象的“相同”的一个实例。为此,您可以使用Identity Map

+0

谢谢 - 这是做的伎俩。欣赏你的想法。有一个例子,我只是改变了代码来演示这个,因为我知道必须有另一种方式。 – Computer