Я столкнулся с ситуацией, когда что-то, что хорошо работало с LINQ to SQL, кажется очень тупым (или, возможно, невозможным) с Entity Framework. В частности, у меня есть объект, который включает свойство rowversion
(как для управления версиями, так и для concurrency). Что-то вроде:
public class Foo
{
[Key]
[MaxLength(50)]
public string FooId { get; set; }
[Timestamp]
[ConcurrencyCheck]
public byte[] Version { get; set; }
}
Я хотел бы иметь возможность взять сущность в качестве входных данных и найти все другие объекты, которые были недавно обновлены. Что-то вроде:
Foo lastFoo = GetSomeFoo();
var recent = MyContext.Foos.Where(f => f.Version > lastFoo.Version);
Теперь в базе данных это сработает: два значения rowversion
могут быть сопоставлены друг с другом без каких-либо проблем. И я сделал аналогичную вещь, прежде чем использовать LINQ to SQL, который сопоставляет rowversion
- System.Data.Linq.Binary
, который можно сравнить. (По крайней мере, в той мере, в которой дерево выражений может быть отображено обратно в базу данных.)
Но в Code First тип свойства должен быть byte[]
. И два массива нельзя сравнивать с обычными операторами сравнения. Есть ли другой способ написать сравнение массивов, которые LINQ to Entities поймут? Или принуждать массивы к другим типам, чтобы сравнение могло пройти мимо компилятора?