Я пытаюсь получить записи SQL, где версия строки больше определенного значения.В SQL это тривиально (WHERE RowVersion> x), но не в динамических запросах Linq.
В моей модели EF я применил примечание к метке времени к соответствующему столбцу.
[Timestamp]
public byte[] RowVersion { get; set; }
И использовал статическое расширение сравнения для сравнения байтов [] (источник: (* https://stackoverflow.com/a/42502969/3424480)
static class MiscExtension
{
public static int Compare(this byte[] b1, byte[] b2)
{
if (b1 == null && b2 == null)
return 0;
else if (b1 == null)
return -1;
else if (b2 == null)
return 1;
return ((IStructuralComparable)b1).CompareTo(b2, Comparer<byte>.Default);
}
}
Я безуспешно пробовал приведенное ниже выражение Dynamic Linq (maxRV - это немного байтовый порядок байтов []).
.Where("RowVersion.Compare(@0) > 0", maxRV);
Это выдает «Нет применимого метода агрегирования». Сравнить«существует», что после некоторого исследования я считаю, что это потому, что «Сравнить» не является допустимым перечислимым методом. Любые указатели на то, где я мог ошибиться / альтернативные подходы приветствуются.