3

私は現在、以下を含むリストを持っています

CountryCode (string)
CountryStr  (string)
RegionStr   (string)
RegionID    (int)
AreaStr     (string)
AreaID      (int)

これは、リンクされたデータのフラット化されたセットです (つまり、基本的には保存された結合検索の結果です)

MVC ルートは 1 つの文字列のみを渡し、それを階層内の適切なレベルのデータに一致させる必要があります。したがって、CountryStr にクエリを実行しようとしています。結果が得られない場合は、地域、次に地域です。しかし、そのクエリを実行する必要があり、たとえば...

 var datURL = (from xs in myList
               //query 1
               where xs.RegionStr == rarREF
               select new
               {
                regionID = xs.RegionId,
                CountryID = xs.CountryCd
               }
               //IF theres no results 
               where xs.AreaStr == rarREF
               select new
               {
                AreaID = xs.AreaID
                regionID = xs.RegionId,
                CountryID = xs.CountryCd
               }             
               ).ToList();

現時点でこれを行う唯一の方法は、各クエリを個別に実行し、返された値を確認してその値を使用することです。より賢く、よりクリーンな方法があることを願っています。

4

2 に答える 2

4

読むのは簡単ではありませんが、次のようなものを使用して単一のパスでこれを行うことができます。

var datURL = (from xs in myList
              where xs.RegionStr == rarREF || xs.AreaStr == rarREF
              select new
              {
                AreaID = (xs.AreaStr == rarRef ? xs.AreaID : default(int)),
                RegionID = xs.RegionId,
                CountryID = xs.CountryId
              }
             ).ToList();

クエリを少し書き直した方が読みやすいかもしれません。

var datURL = (from xs in myList
              let isArea = xs.AreaStr == rarREF
              let isRegion = xs.RegionStr == rarREF
              where isRegion || isArea
              select new
              {
                AreaID = (isArea ? (int?)xs.AreaID : null),
                RegionID = xs.RegionId,
                CountryID = xs.CountryId
              }
             ).ToList();

比較結果を保存すると、後で再利用できます。int?また、「領域なし」値として 0 を使用する代わりに、null 許容値を使用する方法を示すために、にキャストを追加しました。

于 2009-07-20T13:31:25.857 に答える
1

orオペレーターをお探しではありませんか?これはあなたが望む結果を生成しませんか?

var datURL = (from xs in myList
              where xs.RegionStr == rarREF || xs.AreaStr == rarREF
              select new
              {
               AreaID = xs.AreaStr == rarREF ? xs.AreaID : default(int)
               regionID = xs.RegionId,
               CountryID = xs.CountryCd
              }).ToList();
于 2009-07-20T13:31:07.713 に答える