Я использую 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. Эта тема имеет несколько хороших указателей и ссылок.