LINQ Group由where声明

时间:2015-10-21 20:53:17

标签: c# linq

我在编写以下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之间是相同的。

3 个答案:

答案 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()