【问题标题】:cannot delete the first entity . i have a customer contacts page having multiple contacts . if i delete 1st contact , it shows count == null error无法删除第一个实体。我有一个包含多个联系人的客户联系人页面。如果我删除第一个联系人,它会显示 count == null 错误
【发布时间】:2021-06-12 04:48:36
【问题描述】:

我有一个包含多个联系人的客户联系人页面。如果我删除第一个联系人,它会显示 count == null 错误。因此,如果我在 null 发生时使用循环删除第一个联系人,它会删除其余联系人,因为每个联系人都有一个客户关系。

if (cusmodel.LstContacts != null)  
{
    db.Contacts.RemoveRange(db.Contacts.Where(d => d.ContactID == cus.Contact));
}

这也是目前删除亲密接触的代码。但是此代码不会删除第一个联系人,因为计数将为空。 下面我将提供更新和删除联系人的完整代码

  if (cusmodel.LstContacts != null && cusmodel.LstContacts.Count > 0)
                    {
                        long contactId = 0;
                        long[] contactRelationids = new long[cusmodel.LstContacts.Count];
                        int rowRelationcount = 0;
                        foreach (var item in cusmodel.LstContacts)
                        {
                            var contact = new Contact
                            {
                                ContactID = item.ContactID,
                                Name = item.FirstName + " " + item.LastName,
                                Address = item.Name,
                                City = cusmodel.City,
                                State = cusmodel.State,
                                Country = item.Country,
                                Zip = cusmodel.Zip,
                                FirstName = item.FirstName,
                                LastName = item.LastName,
                                TypeOfContact = item.TypeOfContact,
                                Mobile = item.Mobile,
                                Phone = item.Phone,
                                Fax = cusmodel.Fax,
                                EmailId = item.EmailId,
                                Reference = cusmodel.Reference,
                                ContactPerson = cusmodel.ContactPerson,
                                Website = item.Website,
                                Group = 2,
                                Status = Status.active,
                                CountryID = item.CountryID,
                                ContactTypeID = item.ContactTypeID

                            };
                            if (item.ContactID > 0)
                            {

                                contact.ContactID = item.ContactID;
                                db.Entry(contact).State = EntityState.Modified;
                                db.SaveChanges();
                            }
                            else
                            {
                                db.Contacts.Add(contact);
                                db.SaveChanges();
                                contactId = contact.ContactID;
                            }

                            var ContactReltion = (from a in db.ContactRelation
                                                  where a.RelationID == id && a.RelationType == (long)ContctRelation.Customer && a.ContactID == contact.ContactID
                                                  select new
                                                  {
                                                      a.ContactRelationID,
                                                      a.ContactID,
                                                      a.RelationType,
                                                      a.RelationID
                                                  }).FirstOrDefault();



                            ContactRelation Relation = new ContactRelation();
                            Relation.ContactID = contact.ContactID;
                            Relation.RelationType = (long)ContctRelation.Customer;//for customer
                            Relation.RelationID = CustId;




                            if (ContactReltion != null && ContactReltion.ContactRelationID > 0)
                            {
                                Relation.ContactRelationID = ContactReltion.ContactRelationID;
                                db.Entry(Relation).State = EntityState.Modified;
                                db.SaveChanges();
                                contactRelationids[rowRelationcount] = ContactReltion.ContactRelationID;
                                rowRelationcount++;

                            }
                            else
                            {
                                db.ContactRelation.Add(Relation);
                                db.SaveChanges();
                                contactRelationids[rowRelationcount] = Relation.ContactRelationID;
                                rowRelationcount++;
                            }

                        }


                        //delete
                        if (contactRelationids != null && contactRelationids.Count() > 0)
                        {
                            var results = db.ContactRelation.Where(x => !contactRelationids.Contains(x.ContactRelationID)
                            && x.RelationType == (int)ContctRelation.Customer
                            && x.RelationID == cus.CustomerID
                            );

                            if (results != null && results.Count() > 0)
                            {
                                foreach (var item in results)
                                {
                                    ContactRelation contactRelation = db.ContactRelation.Find(item.ContactRelationID);
                                    if (contactRelation != null)
                                    {
                                        db.ContactRelation.Remove(contactRelation);

                                    }

                                    Contact contact1 = db.Contacts.Find(item.ContactID);
                                    if (contact1 != null)
                                    {
                                        db.Contacts.Remove(contact1);

                                    }
                                }
                                db.SaveChanges();
                            }
                        }
                    }

【问题讨论】:

  • 我不确定这些空检查是否有任何意义。我也不确定你如何让 Count() 返回 null ..
  • 你到底想做什么?您的问题似乎主要是一堆“不起作用”的相当荒谬的代码;你最好告诉我们你有什么目标以及你希望实现什么
  • 为了您的方便,我已经放了完整的更新代码
  • 那么您的代码中的错误在哪里?能够粘贴实际的错误消息并指出代码的哪一部分抛出错误?

标签: c# .net entity-framework linq


【解决方案1】:

在第二个场景if (results != null && results.Count() > 0) 如果结果为空,你会得到一个异常。如果检查计数是强制性的,那么您可以通过扩展方法尝试

public int ChecklistIsNull<T>(this IEnumerable<T> list)
{
    return list == null ? 0 : list.Count();
} 

您可以将这行代码替换为if (results != null &amp;&amp; results.Count() &gt; 0)

if (results.ChecklistIsNull&lt;ContactRelation&gt;(results) &gt; 0)

【讨论】:

  • 如果结果为 null,您将得到异常 - 不正确。请查看&amp;&amp; 的工作原理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 2015-07-26
  • 2013-07-11
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2018-10-14
相关资源
最近更新 更多