.net - 使用 Linq 2 EF,我如何找到以 'x' 开头的 guid?

标签 .net linq entity-framework

使用 Linq2Entities (EF4),我需要查询具有 Guid 的实体属性(称之为 id )。我需要查询我的实体是否有任何记录 id s 以给定的前缀开头。

本质上,我需要类似的东西

from items in myEntity 
where items.id.ToString().StartsWith(prefix)
// rest of the query

现在,我知道 L2EF 不支持 Guid 的转换成员(member)使用 ToString() .
SqlFunctions.StringConvert() helper 也不支持它,因为它不接受 Guid争论。

而且我不能使用 SQL 的 LIKE ,如
from items in myEntity 
where items.id like 'prefix%'

因为 L2EF 也不支持它。

到目前为止,我发现的所有建议都建议使用 Contains() ,但这与 starts with 完全不同....在Guid的情况下s,例如,前 8 个字符可能出现在最后 13 个字符中。

那么,您将如何使用 L2EF 查询具有以“前缀”开头的 Guid 的记录?

我可以想到一些技巧,比如转换 uniqueidentifier后端 SQL 数据库上的字段为 varchar() ,但我真的很想了解在诉诸类似的事情之前我是否只是做错了。

最佳答案

两种选择:
1) 更改您的实体数据模型,以便无论“x”表示什么,它都会移动到该实体的属性中,而不是与唯一 id 紧密耦合

2) 将整个实体列表放入一个集合中,然后将它们加载到内存中后,对集合执行 id.ToString().Contains() 查询。一旦它被加载到内存中,CLR 将允许这样做。虽然,可怕的开销。

如果可能的话,我会选择#1。

关于.net - 使用 Linq 2 EF,我如何找到以 'x' 开头的 guid?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5862563/

相关文章:

c# - 在不复制源列表的情况下高效地对 IList<T> 进行排序

c# - 将输出引用程序集构建到子文件夹

entity-framework - 如何让 EF6 遵守关联/关系多样性中的唯一约束(在 FK 上)?

c# - MySql + Entity Framework = 每个派生表必须有自己的别名

c# - EF Core 2.0 迁移 - dotnet ef migrations 'script' 命令输出空白文件

.net - 无法使用基本身份验证进行身份验证

c# - 无法在网络方法中读取内存

c# - 不包含 Where 的定义并且没有扩展方法?

c# - 如何向初始化的表达式树添加新成员?

c# - Linq IEnumerable<IGrouping<string, Class>> 回到 List<Class>