Как преодолеть исключение «Невозможно создать постоянное значение типа ...» для простого оператора WHERE - PullRequest
2 голосов
/ 05 марта 2012

Я использую EF со следующими определениями:

public class StoredFile
{
    public int StoredFileId { get; set; }
    public HashCode HashCode { get; set; }
    public string LocalName { get; set; }
    //and some more fields here...
}

и

[ComplexType]
public class HashCode
{
    public Byte [] ValueArr {get; set;}
    public override bool Equals(object o) {...}
    //some more methods to manipulate hash codes                
}

Я пытаюсь заставить работать следующий запрос:

    public bool TryGetFileInfo(MachineSafeDbDataContext dataContext, HashCode hash, out StoredFile fileInfo)
    {
        var matches = from curr in dataContext.StoredFiles where (hash.Equals(curr.HashCode)) select curr;

        if (matches.Count() == 0)
        {
            fileInfo = null;
            return false;
        }

        fileInfo = matches.First();
        return true;
    }

Однако я получаю исключение "Невозможно создать постоянное значение типа ...". Я предполагаю, что LINQ не может найти перевод в SQL для приведенного выше оператора WHERE.

Мне известен следующий вопрос: Entity Framework - исключение "Не удалось создать постоянное значение типа ..." и следующей страницы от Microsoft: Известные проблемы и замечания в LINQ to Entities . Тем не менее, я все еще хотел бы выбрать файл из моей БД на основе его хеш-кода.

Спасибо,

Редактировать: Я должен был преодолеть ограничения L2E. Эта тема имеет несколько хороших указателей и ссылок.

1 Ответ

2 голосов
/ 05 марта 2012

Вы не можете назвать свой переопределенный .Equals() в L2E.

Однако вы можете напрямую перейти к ValueArr:

var matches = from curr in dataContext.StoredFiles 
              where (curr.HashCode.ValueArr == hash.ValueArr) 
              select curr;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...