【问题标题】:How to combine two c# objects using Linq如何使用 Linq 组合两个 c# 对象
【发布时间】:2015-12-08 19:45:27
【问题描述】:

我正在尝试将两个 LIKE 对象组合在一起并删除重复项。

Tried this

This didn't work

这是我的对象[简单]

public class LabelItem
{
    public string LabelName { get; set; }
    public string LabelValue { get; set; }
}

我的数据调用返回相同的对象类型

public static List<LabelItem> ReturnControlLabelList(Enums.LanguageType languageType, string labelList = "")

我把这个传递给方法

string[] LABELLIST = new string[] { "foxLabel", "commonLabel" };
var helper = new LabelHelper(, LABELLIST);

这是我得到 null 的地方

    public LabelHelper(Enums.LanguageType languageType, string[] labelListName)
    {
        if (labelListName != null)
        {
            List<LabelItem> labels = new List<LabelItem>();
            this.LabelList = new List<LabelItem>();

            foreach (var name in labelListName)
            {
                labels = DBCommon.ReturnControlLabelList(languageType, name);
                this.LabelList.Concat(labels).Distinct().ToList();
            }

        }
        else
        {
            this.LabelList = null;
        }

    }

public List<LabelItem> LabelList { get; private set; }

连接不工作。我不断得到标签的计数 0,我可以看到在 for 循环中返回 275 和 125。

提前感谢您的帮助。

还是有问题

我想使用下面的建议,但仍在苦苦挣扎。

传入的 string[] 将获得两个在循环中连接在一起时不唯一的标签项列表。我需要 this.LabelList 中返回的多个列表的不同之处。

我可以用它来解决这个问题,但是……我敢肯定它的效率太低了。

感谢您的帮助。

             this.LabelList = new List<LabelItem>();

            foreach (var name in labelListName)
            {
                var ret =  DBCommon.ReturnControlLabelList(languageType, name);
                this.LabelList = this.LabelList.Concat(ret).Distinct().ToList();             
            }

            var distinctList = this.LabelList.GroupBy(x => new  { x.LabelName, x.LabelValue })
                 .Select(x => x.FirstOrDefault());

            this.LabelList = new List<LabelItem>();

            foreach (var item in distinctList)
            {
                this.LabelList.Add(item);
                Debug.WriteLine(item.LabelName + ' '  + item.LabelValue);
            }

        }

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    this.LabelList.Concat(labels).Distinct().ToList(); 不将其分配给某些东西没有多大意义。 LINQ 查询不会修改源集合,它会返回一个新集合,因此如果您希望它得到更新,您必须将其分配回 this.LabelList

    this.LabelList = this.LabelList.Concat(labels).Distinct().ToList();
    

    您应该知道,这是一种效率极低的解决方案,您应该使用基于 SelectMany 的方法:

    this.LabelList
        = labelListName.SelectMany(name => DBCommon.ReturnControlLabelList(languageType, name)
                       .Distinct()
                       .ToList();
    

    【讨论】:

      【解决方案2】:

      Concat 和大多数其他 linq 方法返回一个 IEnumerable,然后您需要对其进行处理。它不会更改您现有的列表,因此您只需将其分配给:

      this.LabelList = this.LabelList.Concat(labels).Distinct().ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-06
        • 2020-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多