EF4 - Linq to SQLite и List.Contains странное поведение - PullRequest
0 голосов
/ 24 января 2012

У меня возникла проблема с запросом к моей локальной базе данных 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));
    }
}

Переменная test содержит набор данных emtpt. А теперь к моему вопросу.

Если установлена ​​переменная

var firstGuid = IdsToSearch[0]

и я изменяю следующую строку на

var test = dbContext.<myTable>.Where(cm => cm.IdToFind == firstGuid);

тест содержит два набора, которые я хочу получить.

Если я позволю мне показать (первый) сгенерированный оператор и запустить его непосредственно в базе данных, он также не сможет что-то найти. Но (второе) утверждение успешно.

Так у кого-нибудь есть идеи, где я ошибаюсь, или можно указать на ошибку?

Заранее спасибо, Стив

Первая версия:

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

Редактировать

Если я вызову метод ToList () в моей таблице до Where (), то все в порядке, потому что все содержимое таблицы будет перечислено, и я вызову Contains в этом списке. Но это не может быть решением сначала выбрать всю таблицу. Поэтому я думаю, что проблема заключается в разговоре, который ведет Linq, потому что сгенерированные операторы проверяют Guid как string, но он внутренне сохраняется как Blob.

Во втором утверждении guid не устанавливается напрямую. Есть заполнитель, который будет заменен СУБД? И этот запрос в порядке.

Так есть идеи, с чего начать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...