在 LINQ Where 子句中使用 String.Split 不起作用

using String.Split in a LINQ Where clause not working

我有以下 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

LINQ 查询中的 fileName 字段是 MyTable 中字符串数据类型的列,包含如下字符串:

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

等等...

因为消息拆分中的内容在 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();