#interface #linq-to-entities #reportviewer
#интерфейс #linq-to-entities #reportviewer
Вопрос:
на самом деле, небольшой вопрос.
Я пытаюсь реализовать оператор Linq2Entities, который мог бы принимать более одного значения для определенного «поля». Я передаю несколько строк в getClientsProjected()
я могу легко сравнить одно значение. Но у меня на моей странице есть несколько выпадающих списков, и из них я получаю строку, разделенную coma, которую я позже использую для разделения на string[]
например __ACCOUNT_SITE = "1234,5678"
(см. Код ниже) Я пробовал для /foreach / contains, ни один из которых не сработал…
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 amp;amp; __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 amp;amp; __ACCOUNT_SITE != "ALL")
{
String[] splitSites = __ACCOUNT_SITE.Split(',');
//????????????????????????????????????????????????
}
return projectedClients;
}
Теперь для большинства из вас это будет иметь полный смысл. Я прочитал много статей, но не нашел правильного ответа. Однако я не могу использовать Linq2SQL, поскольку уже создал весь свой сайт с использованием L2E, интерфейса и ReportViewer.
Есть обходной путь?
Ответ №1:
Если вы пытаетесь отфильтровать projectedClients на основе значений в splitSites, тогда используйте:
if (String.IsNullOrEmpty(__ACCOUNT_SITE) != true amp;amp; __ACCOUNT_SITE != "ALL")
{
String[] splitSites = __ACCOUNT_SITE.Split(',');
projectedClients = projectedClients.Where(x => splitSites.Contains(x._ACCOUNT);
}
Комментарии:
1. Я попробовал это и получил следующую ошибку: LINQ to Entities не распознает метод ‘Boolean содержит [строку] (System. Коллекции. Общий. IEnumerable`1[Система. Строка], система. Метод ‘String)’, и этот метод не может быть преобразован в выражение хранилища.
2. Сначала вам нужно создать список<строка>. Попробуйте использовать:
List<string> splitSites = __ACCOUNT_SITE.Split(',').ToList();
вместо массива.3. Я добавил ToList(); выше для преобразования в список.
4. Спасибо, Леонс, это сработало без разделения: » projectedClients = Проектные клиенты. Где(c => __ACCOUNT_SITE. Содержит(c._ACCOUNT_SITE)): » Раньше я делал это по-другому, так что я в большом долгу перед вами!