2017-12-05 13 views
0

式functionを使ってフィルタ関数を実装する必要があります。 フィルタリングされたクエリをエンティティに適用することはできません。式関数を適用する

エンティティ:市名 "ベルリン" によってフィルタリング

[XmlRoot(ElementName = "Zip")] 
public class Zip 
{ 
    [XmlAttribute(AttributeName = "code")] 
    public string Code { get; set; } 
} 

[XmlRoot(ElementName = "District")] 
public class District 
{ 
    [XmlElement(ElementName = "Zip")] 
    public List<Zip> Zip { get; set; } 
    [XmlAttribute(AttributeName = "name")] 
    public string Name { get; set; } 
} 

[XmlRoot(ElementName = "City")] 
public class City 
{ 
    [XmlElement(ElementName = "District")] 
    public List<District> District { get; set; } 
    [XmlAttribute(AttributeName = "name")] 
    public string Name { get; set; } 
    [XmlAttribute(AttributeName = "code")] 
    public string Code { get; set; } 
} 

[XmlRoot(ElementName = "AddressInfo")] 
public class AddressInfo 
{ 
    [XmlElement(ElementName = "City")] 
    public List<City> City { get; set; } 
} 

テストケース。どのようにして述語を関数に適用できますか。

public IConverter<T> Filter(Expression<Func<T, bool>> predicate) 
{ 
    // ??? 
    return this; 
} 

答えて

0

私は、所定の述語でコレクションをフィルタリングする必要があると考えます。

あなたは

public static class Extensions 
{ 
    public static IEnumerable<T> Filter<T>(this IEnumerable<T> collection, Func<T, bool> predicate) 
    { 
     return collection.Where(predicate); 
    } 
} 

があなたのニーズに基づいて述語を定義引数として述語を取るフィルター拡張メソッドを定義します(または既存のcollection.Where拡張メソッドに頼るだけで)することができます

// Filter by city Berlin 
Func<City, bool> berlin = city => city.Name == "Berlin"; 

// Filter by district Spandau 
Func<City, bool> spandau = city => city.Districts.Any(d => d.Name == "Spandau"); 

// Filter by zip 10115 
Func<City, bool> zipcode = city => 
{ 
    var predicate = from district in city.Districts 
        from zip in district.Zips 
        where zip.Code == "10115" 
        select zip; 

    return predicate.Any(); 
}; 

フィルタ所与述語

var query = from address in addresses 
      from city in address.Cities.Filter(berlin) 
      select city; 
012に基づいてデータ

enter image description here

関連する問題