c# - 来自用户输入的 Linq 查询

标签 c# .net linq

我是 linq 的新手,刚遇到一个我不明白的用法。在 ADO .Net 中,SQL 语句是字符串。当用户输入影响查询时,很容易根据用户选择的复选框或下拉列表为 SQL 构建字符串。

在我当前的应用程序中,我有三个不同的下拉框,用户可以在其中为他们的查询选择不同的值。假设每个下拉列表有 10 个值。很容易说对每个可能的组合进行单独的 linq 查询是不切实际的。

如果我知道用户在组合框中选择了一个值,那么我可以轻松地将其编码到 linq 查询中。但是,如果用户没有选择值怎么办?

我如何处理可能存在或可能不存在的选择条件?

谢谢


所以根据我写的输入;

private DataTable FilterDMRMarcIDs()
    {
        var tmpValue = dtDMRMarc.AsEnumerable();

        if (chekbCountry.Checked)
        {
            tmpValue = tmpValue.Where(contact => contact.Field<string>("Country") == cbCountry.SelectedItem);
        }
        if (chekbState.Checked){
            tmpValue = tmpValue.Where(contact => contact.Field<string>("State") == cbState.SelectedItem);
        }
        return tmpValue.CopyToDataTable<DataRow>();
    }    // FilterDMRMarcIDs() ...

其中 dtData 是数据表,cbCountry 和 cbState 是包含字符串的组合框。

问题是这只返回第一个匹配记录,而不是所有其他匹配记录。

有什么建议吗?

最佳答案

没有关于您的实际代码的更多详细信息。

IEnumerableIQueryable 可以轻松构建。 每个操作通常返回另一个 IEnumerableIQueryable,因此您可以根据需要将它们链接起来。

这是一个例子:

public IEnumerable<Value> GetValues(IEnumerable<Value> values, string filter1, string filter2, string filter3)
{
    if (filter1 != null)
        values = values.Where(v => v.Attribute1 == filter1)
    if (filter2 != null)
        values = values.Where(v => v.Attribute2 == filter2)
    if (filter3 != null)
        values = values.Where(v => v.Attribute3 == filter3)
    return values;
}

关于c# - 来自用户输入的 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31282825/

相关文章:

c# - 在 Linq 中,.Select() 的反义词是什么?

c# - 无焦点 ComboBoxItem

.net - 在新的 ASP.NET Core 托管站点上,为什么将 ASPNETCORE_ENVIRONMENT 更改为任何自定义值会导致本地托管失败,但没有错误?

c# - 通过 SSL 的 HttpWebRequest?

.net - 如何使用 WebClient 通过身份验证以编程方式发布到远程网站?

c# - List.Except 不起作用

c# - "Specified cast is not valid"将字符串数组转换为 int 数组时

C# 将两个 tcp 套接字连接在一起

c# - 在 WCF 服务中读取 XML 文件并从服务返回 XML

c# - 我如何遍历特定表单的所有打开实例?