簡體   English   中英

簡單的Linq查詢無法正常工作

[英]Simple Linq Query Not Working

我有一個簡單的函數,可以根據用戶在組合框中選擇的字符串值來過濾數據表。 如果選中了復選框,則在組合框中選擇的字符串是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() ...

嗯,這永遠是你錯過的愚蠢的事情。 過度指定類型永遠不會有傷害!

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() ...

Eric Matson提供的解決方案是正確的。 ComboBox.SelectedItem返回一個Objectcontact.Field<T>返回T因此在您的情況下返回String

我建議您執行以下操作:

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

我想您要選擇值而不是選擇項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM