【问题标题】:WHERE clause in LINQ statement that pulls specific match or everything if no match foundLINQ 语句中的 WHERE 子句,如果未找到匹配项,则提取特定匹配项或所有内容
【发布时间】:2013-04-29 23:29:32
【问题描述】:

我正在尝试编写一个 LINQ 语句,该语句将从表中提取所有项目,其中列类型与用户在下拉菜单中选择的内容相匹配,但如果未找到匹配项,则它会返回表中的所有项目,而不管方式。我已经让它返回与用户选择匹配的所有项目,但我无法弄清楚需要添加哪些代码,因此如果没有找到匹配项,则默认拉取表中的所有项目。

当前代码:

(from i in db.ItemTypeTranslations
    join st in db.SectionTranslations
    on i.ItemType.SectionID equals st.SectionID
    where i.CultureID == 1 && i.ItemType.SectionID == SelectedSection
    select new
    {
       st.SectionID,
       st.Title,
       i.ItemTypeName
    }).ToList();

【问题讨论】:

    标签: c# linq entity-framework-5 asp.net-4.5


    【解决方案1】:

    您可以使用? 运算符将您的 where 子句转换为条件,并将您当前的选择作为成功的分支,并将返回所有内容的选择作为不成功的分支。

    MSDN 上提出了类似的问题

    【讨论】:

      【解决方案2】:

      怎么样

      where i.CultureID == 1 && (i.ItemType.SectionID == SelectedSection || String.IsNullOrEmpty(SelectedSection))
      

      我假设 SelectedSection 是一个字符串。如果不是,则原理相同: Where (SectionID == SelectedSection OR SelectedSection == some-default-value)

      编辑:我刚刚重新阅读了您的问题,并意识到我在回答错误的问题。

      【讨论】:

        【解决方案3】:

        感谢玛吉·梅。这对我帮助很大,我最终得到了这个看起来可以工作的代码:

        (from i in db.ItemTypeTranslations
                                                  join st in db.SectionTranslations
                                                  on i.ItemType.SectionID equals st.SectionID
                                                  where (SelectedSection == 0 ? true : i.ItemType.SectionID == SelectedSection) && i.CultureID == 1
                                                  select new
                                                  {
                                                      i.ItemTypeID,
                                                      st.Title,
                                                      i.ItemTypeName
                                                  }).ToList();
        

        【讨论】:

        • 我在此处发布的原始代码无法正常工作,但经过一段时间的调整,它现在可以正常工作了。我用确认的工作代码更新了代码块。
        猜你喜欢
        • 2021-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多