如何使用 LinQ To Entity 加入

how to use joining with LinQ To Entity

我有这个代码

    var value = (from dc in _context.ContractDetails
                   where dc.EmployeeID == id
                    select dc.Amount);
    return value;
}

是否可以接受 Value.Sum();

你想要return它看起来像的总和。不要让查询是小数,而是让它成为它想要的(var,它真的是 IEnumerable<decimal>)。然后你可以 return 对其进行汇总。总和例如

var query = from emp in Employees
            join cd in ContractDetails
            on emp.EmployeeID equals cd.EmployeeID
            where cd.EmployeeID == id
            select cd.Amount;
return query.Sum();

如果仅此而已,那我也觉得你根本不需要加入,这样会更简单

var query = from cd in ContractDetails
            where cd.EmployeeID == id
            select cd.Amount;
return query.Sum();

...除非您使用联接来测试雇员 table 中是否存在雇员作为条件。

您的 linq 语句产生 IQueryable<Amount>,您需要获取该结果并对其调用 Sum() 以获得您正在寻找的结果。

首先,有没有一个导航属性可以使用(即Employee.ContracteDetails)而不是手动连接两个集合?例如,

var sum = _context.Employee
    .Where( e => e.Id == id )
    .Select( e => e.ContractDetails.Sum( cd => cd.Amount ) )
    .SingleOrDefault();

其次,您没有使用 Employee 中需要的任何信息,甚至您的 where 子句仅引用了 ContractDetails;为什么要从那里开始查询?使用 _context.ContractDetails 代替:

var sum = _context.ContractDetails
    .Where( cd => cd.EmployeeId == id )
    .Sum( cd => cd.Amount );