2017-02-08 16 views
1

私はLINQを初めて使用しています.LINQでIF ELSEを書く方法についてちょっと混乱しています。複数の条件でLINQを書き込む方法

私が作成した現在のLINQは、次のとおりです。

lstRecord = (from a in lstPerson 
      select new GeneralCommonFunctions.MemberDetailSumary 
      { 
       AgeGroupId = a.AgeGroup_id!=null? a.AgeGroup_id.Value: 0, 
       AgeGroupText = a.Agegroup!=null?a.Agegroup.Description: "", 
      }).ToList(); 

今、私は、年齢グループにそれを分類し、一覧からDOBを取得し、今日の日付に基づいて、現在の年齢を計算したいと思います(現在のバージョンはデータベースから直接agegroupを取得します)。

利用可能な年齢層である:

  • BELOW
  • 26-35(IDが1である)

  • 36-45(IDは2である)、(IDである3)

  • 46-55

  • 5(IDは4です) 5以上、例えば

(IDが5である)部材DOBは、1990年1月15日であれば、彼がメンバーDOBは、1970年12月20日であれば2 をagegroupに属し、彼が属しますagegroup 4.

私はこのコーディングでstucked午前:

lstRecord = (from a in lstPerson 
      select new GeneralCommonFunctions.MemberDetailSumary 
      { 
       Age = DateTimeUtility.GetCurrentAge(a.Dob), 
       //I dont know how to continue in this part, my idea is if the age is 0-25, the agegroup_id is 1, if the age is 30, the agegroup_id is 2. 

}).ToList(); 

はあなたの誰もがこれで私を助けることができていますか?ありがとうございました !

UPDATE:

私は更新のアイデアボタンをクリックしたときにLINQを使用してすべての行を持っています。たとえば、ユーザーがボタンをクリックすると、システムはすべての人DOBをチェックし、データベース内の年齢グループを更新します。

たとえば、DOBが1990-01-01の場合、BOB DOBが1970-05-15の場合、年齢グループは4に更新されます。

データベース内のすべての行を更新するためのlinqの書き方は? ありがとうございます!

+0

を入れてその後さて私は、ネストされた条件演算子とそのすべてのロジックを記述しようとしないでしょう。年齢がバンドをチェックし、適切なidを返すことを計算するメソッドを書くだけです。 – juharr

+0

データベースに計算カラムを追加する方がよいでしょう。https://technet.microsoft.com/en-us/library/ms191250(v=sql.105).aspx – MarcinJuraszek

答えて

1
lstRecord = (from a in lstPerson 
      select new GeneralCommonFunctions.MemberDetailSumary 
      { 
       Age = DateTimeUtility.GetCurrentAge(a.Dob), 
       AgeGroupID = GetAgeGroup(a.Dob); 

}).ToList(); 

方法GetAgeGroupを作成して、現在の生年月日を指定できます。あなたの説明からa.DobDateTimeです。あなたは人の年齢を計算し、正しいAgeGroupID

public int GetAgeGroup(DateTime birthYear) 
{ 
    //here you can reuse your method DateTimeUtility.GetCurrentAge(a.Dob), 
    // I just wrote the logic because I'm not sure if it is correct. 
    int age= DateTime.Now.Years - birthYear.Years; 

    if (birthYear > DateTime.Now.AddYears(-years)) 
     age--; 

    if(age<=25) 
     return 1; 
    else if(age> 25 && age<=35) 
     return 2; 
    else if(age> 35 && age<=45) 
     return 3; 
    else if(age> 45 && age<= 55) 
     return 4; 
    else if(age> 55) 
     return 5 
    else 
     return -1; // this will represent invalid age 
} 
+0

ありがとうございますが、私は別のテーブル '人'のデータベースagegroup_id列を更新することです。たとえば、システムが起動すると、データベースは今日の日付に基づいてすべての行を自動的に更新するlinqを実行します。私はすでに今日の日付に基づいて現在の年齢を計算する計算を書いています。しかし、あなたはテーブル '人'の複数の行を更新する方法を教えていただけますか?私は上記の質問に詳細を書きます。どうもありがとうございました! @mybirthname – chonglt

+0

このコードは奇妙なのです...あなたが25歳以下であることを既にチェックした時、年齢が25歳を超えているのをなぜチェックしますか? 'if(age <= 25) リターン1; else if(age <= 35) return 2; else if(age <= 45) return 3; else if(age <= 55) return 4; else return 5 ' – Hogan

1
lstRecord = (from a in lstPerson 
     select new GeneralCommonFunctions.MemberDetailSumary 
     { 
      Age = DateTimeUtility.GetCurrentAge(a.Dob), 
     }).Select(t=>new GeneralCommonFunctions.MemberDetailSumary{ 
         Age=t.Age, 
         AgeGroupID = t.Age<=25?1:t.Age<=35?2:t.Age<=45?3:t.Age<=55?4:5, 
        }).ToList(); 
+0

ありがとう、私はあなたの提案をしていますが、私はテーブル '人'のデータベースのagegroup_id列を更新する別のアイデアがあります。たとえば、システムが起動すると、データベースは今日の日付に基づいてすべての行を自動的に更新するlinqを実行します。私はすでに今日の日付に基づいて現在の年齢を計算する計算を書いています。しかし、あなたはテーブル '人'の複数の行を更新する方法を教えていただけますか?私は上記の質問に詳細を書きます。どうもありがとうございました! @Rick – chonglt

+0

このコードではどのORMを使用していますか?EFまたはLinq2sql?foreach(var p in lstRecord){p.AgeGroupID = 1?2?3 ...} db.SubmitChanges();(Linq2Sql)、ctx.SaveChanges ();(EF) – Rick

+0

テーブルの人のデータが大きい場合、これは良い考えではありません。それはちょうど私の提案です。 – Rick

関連する問題