如何用LINQ对多值值进行分组
本文关键字:何用 LINQ | 更新日期: 2023-09-27 18:09:48
在我的模型中,我已经声明了我必须分组的值,如下所示:
注意!发送方值为多值类型
private ICollection<string> _send;
[SolrField("sender")]
public ICollection<string> Sender
{
get
{
if (_send == null)
{
return new Collection<string> { "" };
}
else
{
return _send;
}
}
set { _send = value; }
}
在我的控制器中,我调用Linq组代码是:
var groups = matchingSpremenljivke.GroupBy(s => s.Sender);
foreach (IGrouping<string, SolrVariables> groups in gruph)
{
...
}
在每个句子中,我得到这个错误:
"Unable to cast type 'Grouping
[System.Collections.Generic.ICollection'1
[Sytem.String],MySoulution.Models.SolrVariables]'to type
'System.Linq.IGrouping'2[System.String,MySolution.Models.SolrVariables]'
此错误仅显示多值类型的变量,对于非多值类型的变量不显示此错误。
我的所有代码现在是这样的:
var grupe = matchingSpremenljivke.GroupBy(s => s.Sender);
foreach (IGrouping<ICollection<string>, SpremenljivkeSolr> grupa in grupe)
{
List<SpremenljivkeSolr> tmpList = new List<SpremenljivkeSolr>();
foreach (SpremenljivkeSolr tmpSolr in grupa)
{
tmpList.Add(tmpSolr);
}
SpremenljivkeSolr spremenljivkeSolr = new SpremenljivkeSolr();
spremenljivkeSolr.Internal = tmpList[tmpList.Count - 1].Internal;
spremenljivkeSolr.Exchangetimestamp = tmpList[tmpList.Count - 1].Exchangetimestamp;
spremenljivkeSolr.Order = tmpList[0].Order;
spremenljivkeSolr.Exchangetimestamp2 = tmpList[0].Exchangetimestamp;
spremenljivkeSolr.MsgT = tmpList[0].MsgT;
spremenljivkeSolr.Sender = tmpList[tmpList.Count - 1].Sender;
seznam.Add(spremenljivkeSolr);
}
谢谢你的帮助!
因为Sender
属性的类型是ICollection<string>
,所以这个查询:
var groups = matchingSpremenljivke.GroupBy(s => s.Sender);
返回的是IGrouping<ICollection<string>,SolrVariables>
而不是IGrouping<string, SpremenljivkeSolr>
。将foreach
中的string
更改为ICollection<string>
或使用var
您还确定要根据ICollection<T>
分组您的值而不提供IEqualityComparer<T>
实现吗?