アドレスのリストがありますが、アドレスは次のように定義されています。
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);
}