我有一个简单的函数,它根据用户在组合框中选择的字符串值过滤数据表。如果选中了复选框,则组合框中的选定字符串是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() ...
答案 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返回Object
和contact.Field<T>
返回T
,因此在您的情况下,它会返回String
。
我建议您执行以下操作:
tmpValue.Where(contact => contact.Field<string>("State")
.Equals(Convert.ToString(cbState.SelectedItem)));
答案 2 :(得分:-1)
我认为你想要选择值而不是选择的项目