【发布时间】:2015-03-04 10:46:01
【问题描述】:
考虑一下,
public class Obj
{
public string PropertyName;
public string Name;
public int Id;
public int Value;
}
List<Obj> lsObjdata = new List<Obj>();
var obj = new Obj { Name = "xyz", PropertyName = "Volume", Id= 1, Value = 25};
lsObjdata.Add(obj);
obj = new Obj { Name = "abc", PropertyName = "Volume", Id= 1, Value = 23};
lsObjdata.Add(obj);
obj = new Obj {Name = "abc", PropertyName = "Oil", Id =1, Value = 45};
lsObjdata.Add(obj);
IEnumerable<IGrouping<String, obj>> results = lsObjData.GroupBy( m => m.Id);
现在,我的 results 将有 3 个值用于相同的 id。我的业务要求我优先考虑具有 xyz 作为名称的 obj,如果它们的属性匹配,则省略另一个。但是,如果xyz 没有abc 具有的属性?获取该属性的值。就像上面给出的第三个对象的初始化一样。
obj = new {Name = "abc", PropertyName = "Oil", Id =1, Value = 45}
名称为xyz 时,此属性和值不存在。这应该添加到我的最终输出中。我的结果应包含列表中的以下两个对象。
obj = new {Name = "abc", PropertyName = "Oil", Id =1, Value = 45}
obj = new { Name = "xyz", PropertyName = "Volume", Id= 1, Value = 25};
PS:我已经完成了解决方案。 但是,我无法使用 Linq/Lambda 表达式并在单行/笔划中获得解决方案。 有人可以在这方面帮助我吗? 谢谢, 山姆
【问题讨论】:
-
这会编译成哪种语言?
-
您需要在
ID和PropertyName两个属性上添加GroupBy。这会给你一个开始。 -
@stefankmitph 这只是逻辑。谁说它可以在任何地方编译?
-
@sam 标签 c#-4.0 告诉我...没有冒犯的伙伴!
标签: linq c#-4.0 collections lambda