EF4 - Linq to SQLite和List.Contains奇怪的行为

时间:2012-01-24 07:32:47

标签: c# linq entity-framework sqlite

我有一些问题查询我的本地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取代?这个查询没问题。

所以任何想法从哪里开始?

0 个答案:

没有答案