怎么办如果声明LINQ查询(How to do If statement in Linq Query

2019-09-19 16:34发布

我现在有一个包含以下内容的列表

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();

我看目前这样做的唯一方法是单独运行的每个查询,然后检查其返回值,并使用一个。 我希望有一个更聪明,更清洁的方法。

Answer 1:

这不会是很容易阅读,但你可以使用这样的事情做在一个单一的通行证:

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作为“无区”值可为空值。



Answer 2:

你是不是在寻找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();


文章来源: How to do If statement in Linq Query