gpt4 book ai didi

c# - 如何修改一个简单的字符串扩展来支持 SQL

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:19 25 4
gpt4 key购买 nike

我有一个真正让生活变得轻松的 C# 字符串扩展,但我遇到了异常:

Method 'System.String ToUrlString(System.String)' has no supported translation to SQL.

我认为这是一个常见问题,有些人已经找到了解决此问题的方法,但我不确定我的方法是否可行。这只是一个简单的捷径,我也尝试过将它与正则表达式一起使用,但出现了同样的异常。

public static string ToUrlString(this String val)
{
return val.Trim().ToLower().Replace(" ", "-").Replace(":", string.Empty);
}

是否有任何额外的装饰器或方法可以修改此代码以使其支持 SQL?我在我的 LINQ 表达式中的 where 子句上调用它。 .ToTagString().ToUrlString() 不是完全相同的方法,但非常相似。

编辑:根据下面的建议,这是我尝试过的其他方法,但我仍然遇到同样的错误。

public IEnumerable<Post> GetPostsByTag(string tagName)
{
var query = from p in db.Posts
join pt in db.PostTags on p.PostID equals pt.PostID
where pt.Tag.TagName.ToTagString().Equals( tagName.ToTagString() )
orderby p.PostDate descending
select p;

var result = query.AsEnumerable();

return from r in result
select r;
}

最佳答案

不,您不能将其转换为 SQL,至少在不实现您自己的 LINQ TO SQL 提供程序的情况下是这样。

问题是您在 Linq 查询中使用它,因此它会尝试将您的方法转换为 SQL 语言。

LINQ 使用 IQueryable 将表达式转换为 SQL 语言。当您使用 IQueryable(从数据上下文返回的所有实体都实现 IQueryable)时,应用于它的所有方法都将被转换为 SQL。

为避免您的自定义方法被转换为 SQL,您应该首先将 LINQ 表达式转换为 IEnumerable,这样就不会发生进一步的转换:

public IEnumerable<String> Example()
{
var query = from f in foos
where f.Id == 'myId'
select f;

var result = query.AsEnumerable();

return from r in result
select r.Url.ToUrlString();
}

希望对您有所帮助!

关于c# - 如何修改一个简单的字符串扩展来支持 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090319/

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