简单的Linq查询不起作用

时间:2015-07-09 04:11:44

标签: c# linq

我有一个简单的函数,它根据用户在组合框中选择的字符串值过滤数据表。如果选中了复选框,则组合框中的选定字符串是where子句的匹配条件。

我遇到的问题是我只收回一条记录,第一条记录,而不是几百条记录。

抱歉,我是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() ...

3 个答案:

答案 0 :(得分:1)

嗯,这总是你想念的愚蠢的事情。过度指定类型永远不会伤害!

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

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

答案 1 :(得分:1)

Eric Matson提供的解决方案是对的。 ComboBox.SelectedItem返回Objectcontact.Field<T>返回T,因此在您的情况下,它会返回String

我建议您执行以下操作:

tmpValue.Where(contact => contact.Field<string>("State")
                        .Equals(Convert.ToString(cbState.SelectedItem)));

答案 2 :(得分:-1)

我认为你想要选择值而不是选择的项目