0

私はContactサブクエリを含むサブクエリを含むクエリをCommunication持っていCommunicationExtensionます

static class Program
    {
        public class Contact
        {
            public int ContactID { get; set; }
            public List<Communication> Communications { get; set; }
            public DateTime? DeletionDate { get; set; }
        }

        public class Communication
        {
            public int CommuncationID { get; set; }
            public List<CommunicationExtension> CommunicationExtensions { get; set; }
            public DateTime? DeletionDate { get; set; }
        }

        public class CommunicationExtension
        {
            public int CommunicationExtensionID { get; set; }
            public int AreaCode { get; set; }
            public DateTime? DeletionDate { get; set; }
        }

        static void Main(string[] args)
        {
            IQueryable<Contact> q = GenerateData();
            IQueryable<Contact> result =
                q.Where(c => c.DeletionDate == null && 
                    c.Communications.Where(co => co.DeletionDate == null && 
                        co.CommunicationExtensions.Where(ce => ce.DeletionDate == null));
        }



        private static IQueryable<Contact> GenerateData()
        {
            return new List<Contact>
                       {
                           new Contact
                               {
                                   ContactID = 1,
                                   DeletionDate = DateTime.Now,
                                   Communications =
                                       new List<Communication>
                                           {
                                               new Communication
                                                   {
                                                       CommuncationID = 1,
                                                       DeletionDate = DateTime.Now,
                                                       CommunicationExtensions = 
                                                       new List<CommunicationExtension>
                                                           {
                                                               new CommunicationExtension
                                                                   {
                                                                       CommunicationExtensionID = 1,
                                                                       AreaCode = 5,
                                                                       DeletionDate = null
                                                                   }
                                                           }
                                                   },
                                               new Communication
                                                   {
                                                       CommuncationID = 2,
                                                       DeletionDate = null,
                                                       CommunicationExtensions = 
                                                       new List<CommunicationExtension>
                                                           {
                                                               new CommunicationExtension
                                                                   {
                                                                       CommunicationExtensionID = 2,
                                                                       AreaCode = 55,
                                                                       DeletionDate = DateTime.Now
                                                                   }
                                                           }
                                                   }
                                           }
                               },
                           new Contact
                               {
                                   ContactID = 2,
                                   DeletionDate = null,
                                   Communications =
                                       new List<Communication>
                                           {
                                               new Communication
                                                   {
                                                       CommuncationID = 1,
                                                       DeletionDate = null,
                                                       CommunicationExtensions = 
                                                       new List<CommunicationExtension>
                                                           {
                                                               new CommunicationExtension
                                                                   {
                                                                       CommunicationExtensionID = 3,
                                                                       AreaCode = 54,
                                                                       DeletionDate = null
                                                                   }
                                                           }
                                                   },
                                               new Communication
                                                   {
                                                       CommuncationID = 2,
                                                       DeletionDate = DateTime.Now,
                                                       CommunicationExtensions = 
                                                       new List<CommunicationExtension>
                                                           {
                                                               new CommunicationExtension
                                                                   {
                                                                       CommunicationExtensionID = 4,
                                                                       AreaCode = 5565,
                                                                       DeletionDate = null
                                                                   }
                                                           }
                                                   }
                                           }
                               }
                       }.AsQueryable();
        }
    }

ビルドしようとすると、次のエラーが発生します。

演算子「&&」は、「bool」型および「System.Collections.Generic.IEnumerable」型のオペランドには適用できません。

オンライン:

IQueryable<Contact> result =
                q.Where(c => c.DeletionDate == null && 
                    c.Communications.Where(co => co.DeletionDate == null && 
                        co.CommunicationExtensions.Where(ce => ce.DeletionDate == null)));

削除されていないすべてのデータをフィルタリングする必要があります(DeletionDate == null)。私のシナリオでは、データベースに最大200のテーブルがあり、各テーブルにはnull許容フィールドが含まれていますDeletionDate

4

1 に答える 1

1

問題は次のとおりです。

c.Communications.Where(co => co.DeletionDate == null && 
    co.CommunicationExtensions.Where(ce => ce.DeletionDate == null)

これらの 2 行はブール値を返さないため、Where呼び出しはそれをどう処理するかわかりません。Communications削除されていないとが少なくとも 1 つある連絡先が必要CommuincationExtensionsですか? その場合は、Where呼び出しを変更しAnyてください。動作するはずです。ただし、実際にあなたを扱うときはContacts、削除されたCommunications/CommunicationExtensionsを除外する必要があることに注意してください. つまり、は thatに関連するcontact.Communicationsすべてを返し、 はall を返すため、削除されたレコードを処理するたびに除外する必要があります。CommunicationsContactcomm.CommunicationExtensionsCommunicationExtensions

于 2012-05-31T13:40:09.310 に答える