2013-05-11 82 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.subtotalv.rate都是十進制類型,我想比較這兩個。任何幫助表示讚賞。

+0

請多加小心格式化在你的問題。代碼遍佈全球。這次我會修復它,但是當你第一次發佈這個問題時,你應該這樣做。 – 2013-05-11 17:27:17

+0

好的,謝謝我新來stackoverflow – 2013-05-11 17:28:09

+0

問題是,你的嵌套查詢提取*序列* - 它甚至沒有提到'b'。不知道你的模式,你真的不清楚你想要達到什麼。 – 2013-05-11 17:29:02

回答

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 *條件的連接看起來很奇怪條目。 – 2013-05-11 17:29:36

+0

基本上這就是我的查詢所有銷售額大於最高員工工資 – 2013-05-11 17:34:15

+0

他的方法'Single'和'SingleOrDefault'只能用作最終查詢操作。請考慮在此實例中使用方法「FirstOrDefault」。這個例外來了。 – 2013-05-11 17:37:09