使用十进制类型的Linq嵌套查询问题

本文关键字:嵌套 查询 问题 Linq 十进制 类型 | 更新日期: 2023-09-27 18:13:12

我在c#中应用以下查询:

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都是十进制类型,我想比较这两个。

使用十进制类型的Linq嵌套查询问题

问题是内部查询返回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()

如果可以从内部查询返回多个值,那么您需要准确地找出比较应该如何工作并应用适当的聚合函数。

只需在内部查询的末尾添加Max:

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,
    };