我一直在这里查看其他线程,以了解如何在linq中执行GroupBy。我正在使用对其他人有用的EXACT语法,但是,它不起作用。
这是查询:
var results = from p in pending
group p by p.ContactID into g
let amount = g.Sum(s => s.Amount)
select new PaymentItemModel
{
ContactID = g.ContactID, // <--- Error here
Amount = amount
};
Run Code Online (Sandbox Code Playgroud)
pending
是一个List<T>
包含其他列ContactID
和的列,Amount
但这是我对此查询仅关心的两列。
问题是,在的内部select new
,g.
不会给我原始列表内的任何列pending
。当我尝试时,我得到:
IGrouping
<int, LeadPurchases>
不包含ContactID的定义,也没有扩展方法等等……
这是我要模拟的SQL:
SELECT
lp.PurchasedFromContactID,
SUM (lp.Amount)
FROM
LeadPurchases lp
GROUP BY
lp.PurchasedFromContactID
Run Code Online (Sandbox Code Playgroud)
您基于进行分组ContactID
,因此它应该是结果的键,因此您必须使用g.Key
而不是g.ContactID
; 这意味着查询应类似于以下内容:
from p in pending
group p by p.ContactID into g
let amount = g.Sum(s => s.Amount)
select new PaymentItemModel
{
ContactID = g.Key,
Amount = amount
};
Run Code Online (Sandbox Code Playgroud)
更新 :
如果要基于多个列进行分组,则GroupBy子句将如下所示:
group p by new
{
p.ContactID,
p.Field2,
p.Field3
}into g
select new PaymentItemModel()
{
ContactID = g.Key.ContactID,
anotherField = g.Key.Field2,
nextField = g.Key.Field3
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2620 次 |
最近记录: |