2013-05-11 4 views
0

Я применяющим этот следующий запрос в C#:Linq Вложенный запрос Проблема с десятичной типа

var query = from b in db.SalesOrderHeaders 
     where b.SubTotal > (from c in db.Employees 
          join v in db.EmployeePayHistories 
         on c.BusinessEntityID equals v.BusinessEntityID 
          select v.Rate) 
     select new 
     { 
      b.BusinessEntityID, 
      b.SubTotal, 
     }; 

Но возвращается ошибка: linq and face error: Operator '>' cannot be applied to operands of type 'decimal' and 'System.Linq.IQueryable<decimal>'.

Оба b.subtotal и v.rate являются десятичными, и я хочу сравнить эти два. Любая помощь приветствуется.

+0

Пожалуйста, больше забот при форматировании ваших вопросов. Код повсюду. На этот раз я исправлю это, но на самом деле вы должны это сделать, когда сначала задаете вопрос. –

+0

ok thanks i m new to stackoverflow –

+0

Проблема в том, что ваш вложенный запрос извлекает * последовательность * - и он даже не упоминает 'b'. На самом деле непонятно, чего вы пытаетесь достичь, не зная своей схемы. –

ответ

0

Просто добавьте Максы в конце внутреннего запроса:

var query = from b in db.SalesOrderHeaders 
    where b.SubTotal > (from c in db.Employees 
         join v in db.EmployeePayHistories 
        on c.BusinessEntityID equals v.BusinessEntityID 
         select v.Rate).Max() 
    select new 
    { 
     b.BusinessEntityID, 
     b.SubTotal, 
    }; 
1

Проблема заключается в том, что внутренний запрос возвращает IEnumerable<decimal>, а не одно значение.

Если гарантированно будет только одна запись вернулась из вашего внутреннего запроса, вы можете просто позвонить Single():

where b.SubTotal > (from c in db.Employees 
        join v in db.EmployeePayHistories 
        on c.BusinessEntityID equals v.BusinessEntityID 
        select v.Rate).Max() 

Если более чем одно значение может быть возвращено из внутреннего запроса, то вам нужно чтобы точно определить, как это сравнение должно работать и применять соответствующую совокупную функцию.

+0

Я собирался опубликовать такой ответ, но было бы странно для соединения с условиями * no *, чтобы иметь только один запись. –

+0

В основном это мой запрос. Все продажи, которые были больше, чем самая высокая зарплата работника –

+0

, методы «Single» и «SingleOrDefault» могут использоваться только как конечная операция запроса. Вместо этого рассмотрите возможность использования метода FirstOrDefault. Это исключение. –

Смежные вопросы