我正在尝试将两个LIKE对象组合在一起并删除重复项。
这是我的对象[简单]
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);
这是我得到空的地方
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; }
concat无效。我一直在为标签计数0,我可以看到返回在for循环中返回275和125.
提前感谢您的帮助。
还有问题
我想使用下面的建议但仍在努力。
传入的字符串[]将获得两个标签项列表,这些标签项在循环中连接在一起时不是唯一的。我需要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);
}
}
答案 0 :(得分:8)
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();
答案 1 :(得分:1)
Concat
和大多数其他linq方法返回一个IEnumerable,然后你需要做一些事情。它不会更改现有列表,因此您只需将其分配给:
this.LabelList = this.LabelList.Concat(labels).Distinct().ToList();