a.f*_*508 17 c# linq entity-framework
我有一个LINQ项目,我想在其中使用我自己的方法.这个NoWhiteSpaces方法应该返回没有空格的上部字符串.
public static class LittleExtensions
{
public static string NoWhiteSpaces(this String s)
{
return Regex.Replace(s, @"\s", string.Empty).ToUpper();
}
}
Run Code Online (Sandbox Code Playgroud)
当我想在LINQ中使用此方法时,如下所示:
static void GetHaendler()
{
using (var riaService = new gkmRia())
{
var hladany = "someone";
var haendlers = from hndlr in riaService.GetGkmHaendlerOutlet()
where hndlr.NameOutlet.NoWhiteSpaces() == hladany.NoWhiteSpaces()
select hndlr;
Console.Write(haendlers.First().NameOutlet);
}
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
LINQ to Entities无法识别方法'System.String NoWhiteSpaces(System.String)'方法,并且此方法无法转换为商店表达式.
有解决方案吗 感谢您的时间.
Sve*_*ven 15
由于LINQ to Entities需要能够将表达式转换为不能用您的方法执行的SQL语句,因此无法使用LINQ to Entities的自定义方法或属性.
一种方法是绕过LINQ to Entities而不是使用LINQ to Objects Enumerable代替Queryable(请注意AsEnumerable()下面的代码):
static void GetHaendler()
{
using (var riaService = new gkmRia())
{
var hladany = "someone";
var haendlers = from hndlr in riaService.GetGkmHaendlerOutlet().AsEnumerable()
where hndlr.NameOutlet.NoWhiteSpaces() == hladany.NoWhiteSpaces()
select hndlr;
Console.Write(haendlers.First().NameOutlet);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这会导致查询在应用程序中而不是在数据库中执行,因此可能会有一些性能影响.如果可能,最好更改查询,以便可以使用实体框架支持的方法表达它.
LINQ to Entities支持的替代表达式如下:
var hladany = "someone".NoWhiteSpaces();
var haenflers = from hndlr in riaService.GetGkmHaendlerOutlet().
where hndlr.NameOutlet.Replace(" ", "").Replace("\t", "") == hladany
select hndlr;
Run Code Online (Sandbox Code Playgroud)
此示例仅处理空格和制表符(正则表达式也处理不同的空白字符),但我不知道您的确切要求,这可能就足够了.您可以随时链接更多Replace呼叫以进行其他替换.
LINQ to Entities尝试将每个被调用的方法转换为执行的数据库查询的一部分.在尝试翻译您的方法时,它会失败,因为它不知道如何在SQL中表示它.
你可以通过它们绕过它
String.Replace()并且String.ToUpper()受支持,应该很容易用它替换自定义方法.| 归档时间: |
|
| 查看次数: |
7148 次 |
| 最近记录: |