我只是想知道为以下 sql 查询语句创建等效的 linq 或 lambda 表达式:
select(sum(a.credit) - sum(a.debit)) as total
from table_A a inner join table_B b on
a.accountid = b.id
where a.[date] >= '2013-01-01'
and a.[date] < '2013-03-27'
and b.Name = 'MKBank'
任何帮助表示赞赏。
您看到的错误是因为您在最终选择中声明匿名类型的方式。如果要指定除属性名称以外的任何内容以供选择,则需要指定成员名称。阅读匿名类型(C# 编程指南)了解更多详细信息。
您的查询还有一些其他问题。您也无法比较DateTime
和string
值,因此您应该在将日期参数传递给查询之前构造它们。如果您只想要一个帐户的总数,则不需要执行任何操作.GroupBy
。.Select
最后o => o.o.credit - o => o.o.debit
不会编译。我想你想要的是o => o.o.credit - o.o.debit
。
试试这个:
DateTime beginDate = ...
DateTime endDate = ...
p = db.Account_Transaction.Join(
db.Accounts,
o => o.AccountId,
p => p.ID,
(o, p) => new { o, p })
.Where(o => o.o.Date >= beginDate && o.o.Date < endDate && o.p.Name == "MKBank")
.Sum(o => o.o.credit - o.o.debit);
这应该有效:
var qr = from a in lA
join b in lB on a.Id equals b.Id
where a.Date >= new DateTime(2013, 1, 1) &&
a.Date < new DateTime(2013, 3, 7) &&
b.Name == "MKBank"
select new
{
cr = a.credit,
db = a.debit
};
var res = qr.Sum((x) => x.cr - x.db);