如何在linq查询中使用子字符串?

时间:2014-02-13 06:06:21

标签: c# linq

我在使用带有lastindex的子字符串时遇到一个异常,   例外如下:

  

LINQ to Entities无法识别方法'Int32 LastIndexOf(System.String)'方法,并且此方法无法转换为商店表达式

我的db存储文件名格式就像这个C:\ Data \ MyFileName.xml 我正在传递文件的名称以找出具体的记录

filename = MyFileName.xml

var record = (from fd in db.Details
where (fd.FullName.Substring(fd.FileName.LastIndexOf("\\") + 1)) == fileName
                          select fd).First();

2 个答案:

答案 0 :(得分:2)

不幸的是,LastIndexOf method is not mapped in LINQ to Entities

但是,我认为EndsWith可以适用于您的情况:

where fd.FileName.EndsWith(fileName)

或为了使其更好,请将fileName@"\"

连接起来
where fd.FileName.EndsWith(@"\" + fileName)

答案 1 :(得分:0)

根据我的经验,我知道某些C#函数无法在Linq查询中使用,即使它们出现在您的编辑器中也是如此。我相信原因是它被转换为SQL,但没有办法实现它们。我会尝试选择整个名称(第一个),然后在查询后执行子字符串函数