3

我目前有一个包含以下内容的列表

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

这是一组扁平的链接数据(基本上是我存储的联合搜索的结果)

MVC 路由只会传递一个字符串,然后我需要将其与 heirachy 中正确级别的数据进行匹配。所以我试图查询 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 作为“无区域”值。

于 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 回答