ArrayIndex не поддерживается в LINQ to Entities - PullRequest
0 голосов
/ 31 октября 2018

'ArrayIndex' не поддерживается в LINQ to Entities.

 var result = uow.Repository<T_Tenant_Sub_PortalSetting>().Search(x => x.StudentPortalUrl.Split('/')[0].ToString() == filterContext.HttpContext.Request.Url.Host 
            && (string.IsNullOrEmpty(x.StudentPortalUrl.Split('/')[1].ToString())) ? true : x.StudentPortalUrl.Split('/')[1].ToString() == WebConfigurationManager.AppSettings["VirtualDirectoryName"])
            .IncludeEntity(x => x.T_Tenant_Sub).AsEnumerable().FirstOrDefault();

1 Ответ

0 голосов
/ 31 октября 2018
  1. вы можете выбрать всех студентов {id, url} в памяти, затем вы можете использовать split по URL.
  2. создайте массив типа ключа вашей сущности (например, int [], если ваш идентификатор int) после выполнения ваших проверок, зависит от хоста и ....
  3. затем вы можете отправить массив в базу данных для извлечения выбранных строк

//imagine this list is my entities IDbSet<...>
List<MyClass> myClasses = new List<MyClass>();

//you can read all entities {id,url} in RAM
Dictionary<int, string> keyValues = 
                new Dictionary<int, string>();


myClasses
.Where(x => true/*some conditions here*/)
.Select(x => new { x.Id, x.Url })
.ToList()//here data fetched from db
.ForEach(x => keyValues.Add(x.Id, x.Url));

//now you can use split

int[] SelectedIds = keyValues
                .Where(x => x.Value.Split('/')[0] == "host"
                        /*&& another conditions here*/)
                .Select(x=>x.Key)
                .ToArray();

//now you can pass an array to db for fetching data

//as dbset
myClasses
    .Where(x => 
        SelectedIds.Contains(x.Id));

    int[] SelectedIds = keyValues.Where(x => x.Value.Split('/')[0] == "host"/*&& another conditions here*/)
        .Select(x=>x.Key)
        .ToArray();

    //now you can pass an array to db for fetching data

    //as dbset
    myClasses.Where(x => SelectedIds.Contains(x.Id));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...