如何用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);
}

谢谢你的帮助!

如何用LINQ对多值值进行分组

因为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>实现吗?