IGrouping不包含以下定义

Cas*_*ton 1 c# linq

我一直在这里查看其他线程,以了解如何在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 newg.不会给我原始列表内的任何列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)

suj*_*lil 5

您基于进行分组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)

  • @CaseyCrookston:是的,我可以帮助您,请参阅我的回答中的更新 (2认同)