2015-05-11 16 views
5

LINQ'de desteklenmiyor, binary sütun türüne sahibim.Varlık Çerçevesi 'ArrayIndex', SQL Server DB tablosundaki Varlıklar

Sorguyu yürütemiyorum, neden? Eğer sorgu biraz değiştirmek için istekli iseniz

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

Ben The LINQ expression node type 'ArrayIndex' is not supported in LINQ to Entities hata

+0

'BinaryColumn' türü nedir? – haim770

+0

Çünkü Entity Framework bunu TSQL'e nasıl çevireceğini bilmiyor. – xanatos

+0

haim770 >> bu C# – Tony

cevap

1

olsun, bu işe yarar:

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

Bu ifadeler çevrilir MSDN

+0

ile' 1 'değil,' 0 'döndüreceğini söyleyebilirim, çünkü SQL 1 – xanatos

+0

@ xanatos, Fixed'den sayar. Teşekkürler. – haim770

3

TSQL yılında SUBSTRING fonksiyon binary/varbinary kullanılabilir.

Somewhere tanımlayın:

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

sonra

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