Используя Linq 2 EF, как мне найти guid, начинающийся с 'x'? - PullRequest
4 голосов
/ 03 мая 2011

Используя Linq2Entities (EF4), мне нужно запросить объект, у которого есть свойство Guid (назовите его id).Мне нужно спросить, есть ли у моей сущности какие-либо записи, которые имеют id s, начиная с заданного префикса.

По сути, мне нужно что-то вроде

from items in myEntity 
where items.id.ToString().StartsWith(prefix)
// rest of the query

Теперь я знаючто L2EF не поддерживает преобразования Guid членов с использованием ToString().

Помощник SqlFunctions.StringConvert() также не поддерживает его, поскольку не принимает аргумент Guid.

И я не могу использовать SQL LIKE, как в

from items in myEntity 
where items.id like 'prefix%'

, потому что он также не поддерживается L2EF.

Все рекомендации, которые я нашелдо сих пор предлагаем использовать Contains(), но это просто не то же самое, что starts with .... В случае Guid s, например, первые 8 символов могут быть найдены в последних 13 символах.

Итак, как бы вы использовали L2EF для запроса записей, у которых Guid начинается с "prefix"?

Я могу подумать о некоторых хаках, таких как преобразование поля uniqueidentifier в внутренней базе данных SQL вvarchar(), но мне бы очень хотелось понять, если я просто делаю это неправильно, прежде чем прибегнуть к чему-то подобному.

Ответы [ 2 ]

4 голосов
/ 03 мая 2011

Два варианта: 1) изменить модель данных вашего объекта таким образом, чтобы независимо от того, что означает «x», он перемещался в свойство этого объекта, а не был тесно связан с уникальным идентификатором

2) получал весь списокобъектов в коллекцию, затем, после их загрузки в память, выполните запрос id.ToString (). Contains () для коллекции.После загрузки в память CLR разрешит это.Хотя, ужасные накладные расходы.

Я бы пошел с # 1, если это возможно.

1 голос
/ 03 мая 2011

Используйте ExecuteStoreQuery в вашем контексте и выполняйте пользовательский оператор SQL прямо в вашем контексте.Что-то вроде:

string prefix = '00000000';       
const string sql = "select * from myEntities where id like @prefix + '%'"; 
var matches = context.ExecuteStoreQuery<MyEntityType>(sql, prefix);

Также посмотрите этот пример MSDN .

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