在SQL Server中,uniqueidentifier
列可以像LIKE比较的字符串一样使用:
SELECT * FROM dbo.Table WHERE GuidColumn LIKE '4c38e01e%'
如何在Entity Framework中使用此功能?
我想要这样的东西
context.Table.Where(x => x.StringColumn.Contains("some string"))
但是对于Guid列而不是字符串列:
context.Table.Where(x => x.GuidColumn ???? "4c38e01e")
答案 0 :(得分:3)
据我所知,在EntityFramework中无法将Guid转换为字符串。 我知道一些工作方式,但它们对我来说并不优雅,尽管它们对你的情况有帮助:
希望它有所帮助。
答案 1 :(得分:2)
我通过在数据库中创建存储过程来解决这个问题,该存储过程处理数据库中的'like'子句,并将过程结果映射到我的实体从edmx。所以我的存储过程是:
CREATE PROCEDURE [dbo].[spGetDevicesWhereGuidContains]
@partialGuidString as varchar (5)
AS
BEGIN
SET NOCOUNT ON;
SELECT * from devices where [Guid] like '%' + @partialGuidString + '%'
END
然后,将proc从模型浏览器映射到实体: http://entityframeworktutorial.net/data-read-using-stored-procedure.aspx#.UT0F96GG1e4
然后从那里显而易见;
List<Device> devices = context.spGetDevicesWhereGuidContains("8").ToList();
不理想,但是做到了。