在 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();
我有以下 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();