Ahmed El-Badry Ответов: 1

Не равный список< gt; В entity framework


У меня есть 4 таблицы следующим образом

Таблица 1 место а
public class CustmLocationA {
        public int Location1_ID { get; set; }
        public string Location1 { get; set; }
        public string Location1_Descrip { get; set; }
        public bool IsActive { get; set; }
}


Таблица 2 местоположение
public class CustmLocationB{
       pubblic int Location2_ID { get; set; }
       public string Location2 { get; set; }
       public string Location2_Descrip { get; set; }
       public int Location1_ID { get; set; }
       public bool IsActive { get; set; }
}


Таблица 3 Место С
public class CustmLocationC {

        public int Location3_ID { get; set; }
        public string Location3 { get; set; }
        public string Location3_Descrip { get; set; }
        public int Location2_ID { get; set; }
        public bool IsActive { get; set; }
        //Location B data
        public string Location2 { get; set; }
        [NotMapped] 
        public bool LocBIsActive { get; set; }
        //location A data
        [NotMapped] 
        public int Location1_ID { get; set; }
        [NotMapped] 
        public string Location1 { get; set; }
        [NotMapped] 
        public bool LocAIsActive { get; set; }
        [NotMapped] 
        public string LocAandB { get; set; }

}

Таблица 4

public class CustmContact
    {
        
        public int contactID { get; set; }
        public int Location3_ID { get; set; }
        public int UserID { get; set; }
        public bool Notify { get; set; }
        public bool Access { get; set; }
        [NotMapped]
        public string UserName { get; set; }
        [NotMapped]
        public string LocationAll { get; set; }

    }


Что я уже пробовал:

Я пытаюсь выбрать все папку C со связанными таблицами информации в месте a и B после того, что мне нужно выбрать некоторые рабочие места пользователей в таблице контактов (4-й стол) после этого мне нужно удалить все выбранные пользователем в таблице от выбранного места, но я обнаружил, что не может применяться к операндам типа int и список и Л;int> В этой линии (а.Location3_ID != (от Z в дБ.контакты где z.UserId == идентификатор пользователя выберите з.Location3_ID))


//Получить не выбранное местоположение по идентификатору пользователя
public List GetSelectedLocByUID (int UserID = 0)
        {
var data = (from LocC in db.locationsC
           join LocB in db.locationsB on LocC.Location2_ID equals LocB.Location2_ID
           join LocA in db.locationsA on LocB.Location1_ID equals LocA.Location1_ID
           select new CustmLocationC
                        {
                            Location1_ID = LocA.Location1_ID,
                            Location1 = LocA.Location1,
                            LocAIsActive = LocA.IsActive,
                            Location2_ID = LocB.Location2_ID,
                            Location2 = LocB.Location2,
                            LocBIsActive = LocB.IsActive,
                            Location3_ID = LocC.Location3_ID,
                            Location3 = LocC.Location3,
                            Location3_Descrip = LocC.Location3_Descrip,
                            LocAandB = LocA.Location1 + "-" + LocB.Location2,
                            IsActive = LocC.IsActive
 }).Where(a => a.LocAIsActive == true && a.LocBIsActive == true && a.IsActive == true 
                        
&& a.Location3_ID != (from z in db.contacts where z.UserID == UserID select z.Location3_ID)

).OrderBy(a => a.Location1).ToList();

            return (data);
            }

1 Ответов

Рейтинг:
12

Bryian Tan

Текущая логика "a.Location3_ID != (from z in db.contacts where z.UserID == UserID select z.Location3_ID)" пытается сравнить одно местоположение с одним или несколькими местоположениями. Что не будет работать, например, если 1 яблоко равно 1 или более яблоку.

Основываясь на том, что опубликовано здесь, я бы предложил

//store the list of Location3_ID for a user in a list
List<int> loc3s = (from z in db.contacts
                               where z.UserID == UserID 
                               select z.Location3_ID).ToList();
//then replace a.Location3_ID != (from z in db.contacts where z.UserID == UserID select z.Location3_ID) with below
//return all the result where Location3_ID not belong to the user
!loc3s.Contains(a.Location3_ID )


Ahmed El-Badry

Большое спасибо! :)