Тип узла выражения LINQ 'ArrayIndex' не поддерживается LINQ to Entities - используя интерфейс и ReportViewer - PullRequest
0 голосов
/ 24 мая 2011

действительно быстрый вопрос.
Я изо всех сил пытаюсь реализовать оператор Linq2Entities, который может принимать более одного значения для определенного «поля». Я передаю несколько строк в getClientsProjected(), я могу легко сравнить одно значение. Но у меня на странице несколько раскрывающихся списков, и из этого я получаю строку, разделенную комой, которую потом использую, чтобы разделить ее на string[] например __ACCOUNT_SITE = "1234,5678" (см. Код ниже), я пробовал для / foreach / не содержит ничего из того, что сработало ...

public IQueryable<ClientViewModel> getClientsProjected(string __ACCOUNT_SITE, string __ACCOUNT)
{
    var projectedClients = from c in getClosedSRs()
                           select new ClientViewModel
                           {
                               _ACCOUNT_ID_CSR = c.ACCOUNT_ID_CSR,
                               _ACCOUNT = c.ACCOUNT,
                               _ACCOUNT_FAMILY = c.ACCOUNT_FAMILY,
                               ...
                               ...
                               _ACCOUNT_SITE = c.ACCOUNT_SITE
                           };

    if (String.IsNullOrEmpty(__ACCOUNT) != true && __ACCOUNT != "ALL")
    {
        //this works fine as an __ACCOUNT is of a single value
        projectedClients = projectedClients.Where(c => c._ACCOUNT == __ACCOUNT);
    }

    if (String.IsNullOrEmpty(__ACCOUNT_SITE) != true && __ACCOUNT_SITE != "ALL")
    {
        String[] splitSites = __ACCOUNT_SITE.Split(',');
        //????????????????????????????????????????????????
    }
    return projectedClients;
}

Теперь, для большинства из вас это будет иметь смысл. Я прочитал много статей, но не нашел правильного ответа. Однако я не могу использовать Linq2SQL, так как уже построил весь мой сайт, используя L2E, интерфейс и ReportViewer.

Есть обходной путь?

1 Ответ

0 голосов
/ 24 мая 2011

Если вы пытаетесь фильтровать projectedClients на основе значений в splitSites, используйте:

if (String.IsNullOrEmpty(__ACCOUNT_SITE) != true && __ACCOUNT_SITE != "ALL")
{
    String[] splitSites = __ACCOUNT_SITE.Split(',');
    projectedClients = projectedClients.Where(x => splitSites.Contains(x._ACCOUNT);
}
...