我有一些问题查询我的本地sqlite数据库。以下是当前代码:
public static Dictionary<Guid, string> GetHashedComanyMembers(List<Guid> IdsToSearch)
{
using (var dbContext = new DbEntities(GetConnectionString()))
{
var test = dbContext.<myTable>.Where(cm => IdsToSearch.Contains(cm.IdToFind));
}
}
变量测试包含一个emtpt数据集。现在问我的问题。
如果设置变量
var firstGuid = IdsToSearch[0]
然后我将下一行更改为
var test = dbContext.<myTable>.Where(cm => cm.IdToFind == firstGuid);
test包含我想要的两个集合。
如果我让我显示(第一个)生成的语句并直接在数据库上运行它也无法找到一些东西。但是(第二)陈述成功了。
那么有没有人知道我哪里出错或者可以指出错误?
先谢谢,史蒂夫
第一个版本:
SELECT
[Extent1].[ValueId] AS [ValueId],
[Extent1].[ValueFirstName] AS [ValueFirstName],
[Extent1].[ValueLastName] AS [ValueLastName],
[Extent1].[ValueLastChanged] AS [ValueLastChanged],
[Extent1].[ValueLastChangedBy] AS [ValueLastChangedBy]
FROM [tblValue] AS [Extent1]
WHERE '28826de0-27ea-42ab-9104-234ee289de16' = [Extent1].[ValueId]
第二
SELECT
[Extent1].[ValueId] AS [ValueId],
[Extent1].[ValueFirstName] AS [ValueFirstName],
[Extent1].[ValueLastName] AS [ValueLastName],
[Extent1].[ValueLastChanged] AS [ValueLastChanged],
[Extent1].[ValueLastChangedBy] AS [ValueLastChangedBy]
FROM [tblValue] AS [Extent1]
WHERE [Extent1].[ValueId] = @p__linq__0
如果我在Where()一切正常之前调用我的表上的ToList()方法,因为整个表内容将被枚举,我调用此列表中的Contains。但这不能成为首先选择整个表格的解决方案。
所以我认为问题是Linq完成的对话,因为生成的语句会再次检查Guid为string
,但内部存储为Blob
。
在第二个声明中,没有直接设置guid。有一个占位符将被DBMS取代?这个查询没问题。
所以任何想法从哪里开始?