0

我正在尝试编写一个 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();
4

3 回答 3

1

怎么样

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

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

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

于 2013-04-29T23:42:36.807 回答
1

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

在MSDN上提出了类似的问题

于 2013-04-29T23:42:37.727 回答
1

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

(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();
于 2013-04-30T00:23:04.850 回答