gpt4 book ai didi

c# - 将我自己的方法与 LINQ to Entities 结合使用

转载 作者:可可西里 更新时间:2023-11-01 03:00:13 24 4
gpt4 key购买 nike

我有一个使用 LINQ 的项目,我想在其中使用我自己的方法。此 NoWhiteSpaces 方法应返回不含空格的上部字符串。

public static class LittleExtensions
{
public static string NoWhiteSpaces(this String s)
{
return Regex.Replace(s, @"\s", string.Empty).ToUpper();
}
}

当我想将此方法与 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);
}
}

我收到此错误消息:

LINQ to Entities does not recognize the method 'System.String NoWhiteSpaces(System.String)' method, and this method cannot be translated into a store expression.

有什么解决办法吗?感谢您的宝贵时间。

最佳答案

无法将自定义方法或属性与 LINQ to Entities 一起使用,因为 LINQ to Entities 需要能够将表​​达式转换为 SQL 语句,而您的方法无法做到这一点。

一种解决方法是绕过 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);
}
}

请注意,这会导致查询在您的应用程序中执行,而不是在数据库中执行,因此可能会对性能产生一些影响。如果可能,最好更改查询,以便可以使用 methods supported by the Entity Framework 表示.

LINQ to Entities 支持的替代表达式如下:

var hladany = "someone".NoWhiteSpaces();
var haenflers = from hndlr in riaService.GetGkmHaendlerOutlet().
where hndlr.NameOutlet.Replace(" ", "").Replace("\t", "") == hladany
select hndlr;

此示例仅处理空格和制表符(正则表达式也处理不同的空白字符),但我不知道您的确切要求,所以这可能就足够了。您始终可以链接更多的 Replace 调用来进行额外的替换。

关于c# - 将我自己的方法与 LINQ to Entities 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17187395/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com