На самом деле это не ответ, и я собирался сделать это комментарием, но мне нужно больше места для фрагмента кода.
Судя по коду SubSonic, яЯ уверен, что в некоторых случаях, когда вы получаете ошибки «конструктор не поддерживается», SS по какой-то причине пытается проанализировать ваш оператор new ...()
в SQL.Оскорбительный метод является частью средства форматирования SQL и выглядит так, как будто он обрабатывает только DateTime:
protected override NewExpression VisitNew(NewExpression nex)
{
if (nex.Constructor.DeclaringType == typeof(DateTime))
{
// ...omitted for brevity...
}
throw new NotSupportedException(string.Format("The construtor '{0}' is not supported", nex.Constructor));
}
Я думаю, что это обычно срабатывает, если вы сделаете что-то вроде:
someData .Where (data => data.CreatedDate <= new DateTime (2011, 12, 01)). Выберите (data => data)
Тогда это newDateTime
будет преобразовано в SQL.Поэтому, как бы вы ни изменили Linq, чтобы получить это исключение, я думаю, что это то, что происходит.Я предполагаю, что это потому, что если вы добавите .OrderBy()
после .Select()
, то вы больше не вызываете OrderBy для IQueryable того, что возвращает AllItems (), а вместо этого пытаетесь упорядочить по тому, что возвращается.Select (), который является множеством новых объектов качества, поэтому SS, вероятно, пытается превратить все это в SQL.
Интересно, будет ли это работать правильно, если вы изменили его?
AllItems().Where(c => c.Id== id)
.OrderBy(d => d.QualityType)
.Select(d => new Quality(d.QualityType));