//private void RemoveLogicPhrase(MyProjectEntities projectContext, DataAccess.LogicPhrase logicPhrase)
        //{
        //    while (logicPhrase.Phrase1.Any())
        //    {
        //        foreach (var item in logicPhrase.Phrase1.ToList())
        //        {
        //            RemovePhrase(projectContext, item);
        //        }
        //    }
        //    projectContext.LogicPhrase.Remove(logicPhrase);
        //}

        private void RemovePhrase(MyProjectEntities projectContext, DataAccess.Phrase item, bool removeSearchRepository)
        {
            if (item.ColumnPhraseID != null)
            {
                projectContext.ColumnPhrase.Remove(item.ColumnPhrase);
                //  item.ColumnPhrase = null;
            }
            //else if (item.SearchRepositoryID != null)
            //{
            //    RemovePhrase(projectContext, item.SearchRepository.LogicPhrase.Phrase.First());
            //    //    projectContext.LogicPhrase.Remove(item.SearchRepository.LogicPhrase);
            //    //projectContext.SearchRepository.Remove(item.SearchRepository);

            //    // item.SearchRepository = null;
            //}
            else if (item.LogicPhraseID != null)
            {
                //Phrase1 به ParentLogicPhraseID ربط دارد
                foreach (var litem in item.LogicPhrase.Phrase1.ToList())
                {
                    RemovePhrase(projectContext, litem, true);
                }

                if (item.LogicPhrase.SearchRepository != null)
                {
                    if (removeSearchRepository)
                    {
                        RemoveSearchRepository(projectContext, item.LogicPhrase.SearchRepository, false);
                    }
                }
                projectContext.LogicPhrase.Remove(item.LogicPhrase);
                //    item.LogicPhrase = null;
            }
            projectContext.Phrase.Remove(item);
        }
        //private DataAccess.Phrase ToLogicPhraseAsPhrase(ProxyLibrary.LogicPhrase logicPhrase)
        //{
        //    DataAccess.Phrase dbphrase = new DataAccess.Phrase();
        //    dbphrase.LogicPhrase = ToLogicPhrase(logicPhrase);
        //    return dbphrase;
        //}
        private Tuple <DataAccess.ColumnPhrase, DataAccess.Phrase> ToColumnPhrase(MyProjectEntities projectContext, SearchProperty searchProperty)
        {
            DataAccess.Phrase phrase = new DataAccess.Phrase();
            phrase.Type = 3;
            projectContext.Phrase.Add(phrase);
            phrase.ColumnPhrase = new ColumnPhrase();
            var dbColumnPhrase = phrase.ColumnPhrase;

            dbColumnPhrase.ColumnID = searchProperty.ColumnID;
            dbColumnPhrase.EntitySearchColumnsID = searchProperty.SearchColumnID == 0 ? (int?)null : searchProperty.SearchColumnID;
            dbColumnPhrase.Operator = searchProperty.Operator.ToString();
            dbColumnPhrase.Value    = searchProperty.Value == null ? null : searchProperty.Value.ToString();
            return(new Tuple <ColumnPhrase, DataAccess.Phrase>(dbColumnPhrase, phrase));
        }
        //private DataAccess.Phrase ToSearchRepositoryAsPhrase(DP_SearchRepository dP_SearchRepository)
        //{
        //    DataAccess.Phrase dbphrase = new DataAccess.Phrase();
        //    dbphrase.SearchRepository = ToSearchRepository(dP_SearchRepository);
        //    return dbphrase;
        //}
        //private DataAccess.LogicPhrase ToLogicPhrase(ProxyLibrary.LogicPhrase logicPhrase)
        //{
        //    DataAccess.LogicPhrase dbphrase = new DataAccess.LogicPhrase();
        //    dbphrase.Phrase.Add(new DataAccess.Phrase());
        //    dbphrase.LogicPhrase = ToLogicPhrase(logicPhrase);
        //    return dbphrase;
        //}
        private Tuple <DataAccess.LogicPhrase, DataAccess.Phrase> ToLogicPhrase(MyProjectEntities projectContext, ProxyLibrary.LogicPhraseDTO logicPhrase)
        {
            //if (logicPhrase.Phrases.Any())
            //{
            DataAccess.Phrase phrase = new DataAccess.Phrase();
            phrase.Type = 2;
            projectContext.Phrase.Add(phrase);
            phrase.LogicPhrase = new DataAccess.LogicPhrase();
            var dbLogicPhrase = phrase.LogicPhrase;

            SetLogicPhrase(projectContext, dbLogicPhrase, logicPhrase);
            return(new Tuple <DataAccess.LogicPhrase, DataAccess.Phrase>(dbLogicPhrase, phrase));
            //}
            //else
            //    return null;
        }
 private void SetLogicPhrase(MyProjectEntities projectContext, DataAccess.LogicPhrase dbLogicPhrase, ProxyLibrary.LogicPhraseDTO logicPhrase)
 {
     dbLogicPhrase.AndOrType = (short)logicPhrase.AndOrType;
     foreach (var phrase in logicPhrase.Phrases)
     {
         DataAccess.Phrase dbPhrase = null;
         if (phrase is SearchProperty)
         {
             dbPhrase = ToColumnPhrase(projectContext, phrase as SearchProperty).Item2;
         }
         else if (phrase is DP_SearchRepository)
         {
             dbPhrase = CreateSearchRepository(projectContext, phrase as DP_SearchRepository);
         }
         else if (phrase is ProxyLibrary.LogicPhraseDTO)
         {
             dbPhrase = ToLogicPhrase(projectContext, phrase as ProxyLibrary.LogicPhraseDTO).Item2;
         }
         dbPhrase.LogicPhrase1 = dbLogicPhrase;
     }
 }