1

単一のレコード、つまり特定のIDに一致するリストがあります。

プログラムにすでに多くのループがあるため、サーバーに負担がかかるため、FOREACHループを使用せずにこのリストのプロパティ(つまり、その単一レコードの列)を使用したいと思います...実行できますか?

IDに基づいてViewStateから取得したレコードをフィルタリングしています。

var selectedPracticeInfo = 
          (List<PropPractice>) ViewState["dicPracticesInGrupWithTimeZone"];

var selectedPracticeforEncounter = 
             from selectedPractice in selectedPracticeInfo
             where 
                selectedPractice.PracticeId 
                     == Convert.ToInt32(ddlPractice.SelectedValue)
  select new PropPractice
  {
    PracticeId = selectedPractice.PracticeId,
    PracticeName = selectedPractice.PracticeName,
    TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
  };

その単一レコードのTimeZoneDisplayNameを直接引き出すこのようなことを計画していますが、「文字列をブール値として使用することはできません」と表示されます。

var practiceTimeZoneName 
       = selectedPracticeforEncounter
               .Single(practice=>practice.TimeZoneDisplayName

それで、 FOREACH以外の方法でそれができるかどうか尋ねたかったのですか??

4

3 に答える 3

1
var practiceTimeZoneName=selectedPracticeforEncounter.Single().TimeZoneDisplayName
于 2012-12-05T11:37:10.767 に答える
1

これはあなたが必要とするようなものですか?First Or Defaultは、単一のレコードまたはnullを確実に取得します

var result = selectedPracticeInfo
             .Where(m=> m.PracticeID == (Int32)ddlPractice.SelectedValue)
             .FirstOrDefault();

if(result != null){

var timezone = result.TimeZoneDisplayName;

}

結果は一種のPropPracticeになりますが、良い練習のために、できる限り強く定義された使用法を使用してください。

PropPractice = selectedPracticeInfo
               .Where(m=> m.PracticeID == (Int32)ddlPractice.SelectedValue)
               .FirstOrDefault();

新しいオブジェクトを作成するために、以下は必要ありません。

select new PropPractice
  {
    PracticeId = selectedPractice.PracticeId,
    PracticeName = selectedPractice.PracticeName,
    TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
  };
于 2012-12-05T11:38:42.640 に答える
1

単一のものだけが必要な場合は、LINQクエリの最後に.SingleOrDefualtを追加してみてください

var selectedPracticeforEncounter = (from selectedPractice in selectedPracticeInfo
                                         where selectedPractice.PracticeId == Convert.ToInt32(ddlPractice.SelectedValue)
 select new PropPractice
{
PracticeId = selectedPractice.PracticeId,
PracticeName = selectedPractice.PracticeName,
TimeZoneDisplayName = selectedPractice.TimeZoneDisplayName
}).SingleOrDefault();

LINQ:フィルタリング基準でSingleOrDefaultとFirstOrDefault()を使用する場合

于 2012-12-05T11:41:51.917 に答える