2015-05-11 3 views
5

в моей таблице DB SQL Server, у меня есть тип столбца binary.Entity Framework «ArrayIndex» не поддерживается в LINQ to Entities

Я не могу выполнить запрос, почему?

var data = (from x in model.MyTable 
      where x.BinaryColumn[0] == 1 
      select x).FirstOrDefault(); 

Я получаю ошибку The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities

+0

Что такое тип 'BinaryColumn'? – haim770

+0

Поскольку платформа Entity Framework не знает, как ее перевести на TSQL. – xanatos

+0

haim770 >> это тип 'byte []' в C# – Tony

ответ

1

Если вы готовы изменить ваш запрос немного, это будет работать:

var data = (from x in model.MyTable 
      where SqlFunctions.CharIndex(new byte[] { 1 }, x.BinaryColumn) == 1 
      select x).FirstOrDefault(); 

См MSDN

+0

, он вернет '1', а не' 0', я думаю, потому что SQL рассчитывает от 1 – xanatos

+0

@xanatos, Fixed. Благодарю. – haim770

4

Эти выражения переводятся в SQL-запросы, и это одна из тех вещей, которые вы не можете сделать. Посмотрите здесь более подробно: LINQ To Entities doesn't recognize array index

3

В TSQL функция SUBSTRING может использоваться на binary/varbinary.

Где-то определить:

[DbFunction("SqlServer", "SUBSTRING")] 
public static byte[] SubString(byte[] field, int start, int length) 
{ 
    throw new NotSupportedException("Direct calls are not supported."); 
} 

затем

var data = (from x in model.MyTable 
      where Substring(x.BinaryColumn, 1, 1) == new byte[] { 1 } 
      select x).FirstOrDefault(); 
Смежные вопросы