использование String.Split в предложении LINQ Where не работает - PullRequest
0 голосов
/ 21 апреля 2020

У меня ниже LINQ-запрос:

List<string> paths = (from an in modelDb.MyTable
                            where an.Id == 0 &&
                                  an.fileName.Split('_')[0] == "19292929383833abe838ac393" &&
                                  an.fileName.Split('_')[1].ToUpper() == "FINANCE" &&
                                  an.fileName.ToUpper().Contains("SIGNED")
                            select an.filePath).ToList();

..., который выдает ошибку ниже времени выполнения:

Entity Framework 'ArrayIndex' is not supported in LINQ to Entities

Поле fileName в запросе LINQ представляет собой столбец в MyTable типа данных строки и содержит строки типа:

8845abd344ejk3444_FINANCE_SIGNED.pdf
4565abd34ryjk3454_FINANCE_UNSIGNED.pdf
477474jkedf34dfe4_MARKETING_UNSIGNED.pdf

и т. Д. *

1 Ответ

3 голосов
/ 21 апреля 2020

Поскольку разделение на сообщения не будет поддерживаться в linq to sql, и если вы хотите получить результат без дополнительных методов, использование Contains () должно дать вам требуемый результат

List<string> paths = (from an in modelDb.MyTable
        where an.Id == 0 &&
                an.fileName.Contains("19292929383833abe838ac393") &&
                an.fileName.Contains("FINANCE") &&
                an.fileName.ToUpper().Contains("SIGNED")
        select an.filePath).ToList();

Другой способ загрузить все в память и сделать разделение после этого, например

List<string> temp = (from an in modelDb.MyTable
                            where an.Id == 0  
                                  an.fileName.ToUpper().Contains("SIGNED")
                            select an.filePath).ToList();

paths = temp.Where(an =>
     an.fileName.Split('_')[0] == "19292929383833abe838ac393" &&
     an.fileName.Split('_')[1].ToUpper() == "FINANCE").ToList();  
...