使用 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/