我在编写以下LINQ查询时遇到问题。
ModelResponses
集合包含Attribute
种类型的集合。我想选择具有唯一“名称”的ModelResponses,该名称存储在Attributes
集合中的一个元素内(Attribute.Value
Attribute.Id
== 5)。< / p>
以下是我所拥有的,似乎不起作用。我认为我在GroupBy()
内部的逻辑不正确。
var test = deserialized.ModelResponses.
GroupBy(
x => x.Attributes.Where(attr => CasApiConversions.ToInt64(attr.Id) == 5).
Select(y => new {y.Id, y.Value})
).Select(x => x.First()).ToList();
ModelResponse类:
public partial class ModelResponse
{
[System.Xml.Serialization.XmlElementAttribute("attribute")]
public Attribute[] Attributes { get; set; }
}
属性类:
public partial class Attribute
{
[System.Xml.Serialization.XmlAttributeAttribute("id")]
public string Id { get; set; }
[System.Xml.Serialization.XmlTextAttribute()]
public string[] Value { get; set; }
}
ModelResponse [0] .Attribute.Value [0] =“MyModel”(其中Attribute为Attribute.Id == 5) ModelResponse [1] .Attribute.Value [0] =“MyModel”(其中Attribute为Attribute.Id == 5)
我希望我的LINQ查询只给我第一个ModelResponse,因为Attribute.Id == 5的属性值在两个ModelResponse之间是相同的。
答案 0 :(得分:1)
你应该只有一个班级
public partial class ModelResponse
{
[System.Xml.Serialization.XmlAttributeAttribute("id")]
public string Id { get; set; }
[System.Xml.Serialization.XmlTextAttribute()]
public string[] Value { get; set; }
}
答案 1 :(得分:1)
var SortByGroup = deserialized.ModelResponses.SelectAll(
x => x.Attributes.Where(x=> CasApiConversions.ToInt64(x.Id) == 5).
Select(y => new {y.Id, y.Value})
).Select(x => z.First()).ToList();
答案 2 :(得分:0)
也许你需要尝试
.ToList().Distinct()