オブジェクト構造を正しくフィルタリングするためにリストを呼び出すラムダ式を見つけるのに苦労しています。私はここの誰かが助けてくれることを願っていました。私は.NET 3.5とLINQを使用しており、オブジェクトドメインはLinqからSQL DBMLに設定されています。私は特にラムダ式を使いたいと思っています。スケジュールでフィルタリングするLINQラムダ式を開発するのに助けが必要
オブジェクト構造は、人が設定を持つもので、1つの設定はStartDateとEnd Dateを持つ別のスケジュールクラスに対応するSchedule名です。
public class MyPerson
{
public int ID { get; set; }
public List<MySetting> Settings { get; set; }
}
public class MySetting
{
public int ID { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
public class MySchedule
{
public string ID { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
}
スケジュールには開始日と終了日があり、人の状態はアクティブまたはスケジュールにすることができます。
List<MySchedule> schedules = new List<MySchedule>();
MySchedule scheduleA = new MySchedule { ID = "ScheduleA", StartDate = Convert.ToDateTime("1/1/2008"), EndDate = Convert.ToDateTime("12/31/2008") };
MySchedule scheduleB = new MySchedule { ID = "ScheduleB", StartDate = Convert.ToDateTime("1/1/2009"), EndDate = Convert.ToDateTime("12/31/2009") };
schedules.Add(scheduleA);
schedules.Add(scheduleB);
List<MySetting> settingsJill = new List<MySetting>();
MySetting settingFirstName = new MySetting { ID = 1, Name = "FirstName", Value = "Jill" };
MySetting settingScheduleName = new MySetting { ID = 2, Name = "ScheduleName", Value = "ScheduleB" };
MySetting settingState = new MySetting { ID = 3, Name = "State", Value = "Scheduled" }; // Jill uses ScheduleB
settingsJill.Add(settingFirstName);
settingsJill.Add(settingScheduleName);
settingsJill.Add(settingState);
List<MySetting> settingsBill = new List<MySetting>();
settingFirstName = new MySetting { ID = 1, Name = "FirstName", Value = "Bill" };
settingScheduleName = new MySetting { ID = 2, Name = "ScheduleName", Value = "ScheduleA" };
settingState = new MySetting { ID = 3, Name = "State", Value = "Scheduled" }; // Bill is Scheduled last year
settingsBill.Add(settingFirstName);
settingsBill.Add(settingScheduleName);
settingsBill.Add(settingState);
List<MySetting> settingsJane = new List<MySetting>();
settingFirstName = new MySetting { ID = 1, Name = "FirstName", Value = "Jane" };
settingScheduleName = new MySetting { ID = 2, Name = "ScheduleName", Value = "ScheduleA" };
settingState = new MySetting { ID = 3, Name = "State", Value = "Active" }; // Jane is Active
settingsJane.Add(settingFirstName);
settingsJane.Add(settingScheduleName);
settingsJane.Add(settingState);
List<MyPerson> persons = new List<MyPerson>();
MyPerson Jane = new MyPerson { ID = 1, Settings = settingsJane };
MyPerson Jill = new MyPerson { ID = 2, Settings = settingsJill };
persons.Add(Jane);
persons.Add(Jill);
persons.Add(Bill);
私は国家=「アクティブ」OR開始日と終了日の間、現在の日付を含むScheduleNameはとのある人を返しますラムダ式を作成することにより、人物のリストをフィルタリングします。言い換えれば、Jillはスケジュールされており、ScheduleBを使用しており、ScheduleBは2009年、今日は6/17/2009であるため、フィルタリングされたリストに表示されます。
私は、任意の助けを事前に
List<MyPerson> filter = persons.Select ( // and this is where I get stuck.
おかげで始めています。
ありがとう:あなたのようなデータ構造を持っていた場合
を想像してみてください。私はインフォメーションストアが不足しており、リファクタリングが必要であることに同意します。 (なぜラムダがこんなにかっこいいのですか?)BTW、私は昨年予定されていたBillを追加しましたが、彼はフィルターを通過しました。私は表現を修正できるかどうかを知らせます。 –
私は&|の代わりに&&を持っていましたが、それはBillを拾ってはいけません。どのようなコードを使用していますか?あなたの初期化コードをコピーしてクエリを実行し、JillとJaneだけを返します。参照してください:http://pastebin.com/m2d726e3f – Jimmy
ありがとうジミー、それは私が探していたeexactlyだった。 –