0

アドレスのリストがありますが、アドレスは次のように定義されています。

public class Address
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime ModifiedDate { get; set; }
}

以前の呼び出しに基づいて、タプルのリストがありますが、タプルはアドレス ID と変更日で構成されています。

e.g. List<Tuple<int, DateTime>>

ここで、対応する ID を持つすべてのアドレスを取得したいと思いますが、それらが変更されている場合のみです。

タプルのリストを ID と辞書を含む int 配列に変換しましたが、ID がキーで変更日が値です。

int[] ids;
Dictionary<int, DateTime> dates;

以下は、対応する ID を持つすべてのアドレスを取得するのに十分です。

addressList.Where(a => ids.Contains(a.Id));

残念ながら、次のことはできません。

例外:「LINQ to Entities はメソッド 'System.DateTime get_Item(Int32)' メソッドを認識しないため、このメソッドはストア式に変換できません。」

addressList.Where(a => ids.Contains(a.Id) && dates[a.Id] < a.ModifiedDate);

この問題はループで解決できますが、より洗練された解決策を探しています。

List<Address> modifiedAddressList = new List<Address>();
foreach (Address a in addressList)
{
    if (a.ModifiedDate > dates[a.Id]) modifiedAddressList.Add(a);
}
4

2 に答える 2