用户输入

时间:2015-07-08 03:02:59

标签: 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是包含字符串的组合框。

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

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

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

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;
}

答案 1 :(得分:0)

您没有提供组合框中存储的信息类型,以及您拥有的实体的类型集合。例如,默认情况下(当用户未选择任何值时),每个组合框的值具有值= 0(默认(int)),并且您的实体(让我们称之为Sample)具有3个属性(int { {1}},字符串age,字符串Name)。然后你可以做类似的事情:

Surname

您可以处理任何组合框更改并调用 public IEnumerable<Sample> Filter(IEnumerable<Sample> collectionToFilter, int age, string name, string surname){ if(!age.Equals(default(age))){ collectionToFilter = collectionToFilter.Where(e=>e.Age==age); } if(!string.IsNullOrEmpty(name)){ collectionToFilter = collectionToFilter.Where(e=>e.Name==name); } if(!string.IsNullOrEmpty(surname)){ collectionToFilter = collectionToFilter.Where(e=>e.Surname==surname); } return collectionToFilter; } 方法。而已。 每个过滤器仅在将其设置为Filter值时才会应用。

例如,如果您要拨打下一个电话:

not default

在某些数组中,将是var someArray = Filter(someArray, 50, null, null); == 50

的所有实体
Age

在某些数组中,所有实体都有var someArray = Filter(someArray, 50, "John", null); == 50和Age == John

等...