c# linq.Where+Func 篩選數據


界面上的DataGridView綁定數據List<StudentScore>,其中StudentScore有五個屬性:Name,Gender,Age,Major,Score.篩選的關鍵詞有兩個:Major和Score。

public class StudentScore
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    public string Major { get; set; }
    public int Score { get; set; }
}

要點一:根據界面傳遞的數據查找和篩選數據的方法,無非是查找控件的值,同時通過一些標記來匹配相應的屬性,來組合查找條件。個人喜歡用Tag和Text來保存這些值。

要點二:用Linq的Where子句可以很方便的從集合中篩選子句,麻煩的是組合Where的條件。

要點三:我們知道,Linq的查找語句可以多個Where條件組合查詢,那么只需要傳遞每個Where的Func<Object,bool>到Where就可以了。到此,我們就知道應該在控件的Tag屬性里面寫什么了。

rdo.Tag =  x => x.Score > scoreGrade[scoreGrade.Count - 1];

再監視rdo的Click事件,Click事件觸發后,將rdo.Tag值賦予給類下的局部變量。

Func<StudentScore, bool> filterMajor = x => true, filterScore = x => true;
void Radio_Click(object sender, string key)
{
    var radio = sender as RadioButton;
    if (radio == null || radio.Tag == null || !(radio.Tag is Func<StudentScore, bool>)) return;
    if (key == "major") filterMajor = radio.Tag as Func<StudentScore, bool>;
    else if (key == "score") filterScore = radio.Tag as Func<StudentScore, bool>;
    DoQuery();//同時觸發查詢事件,綁定新結果
}
rdo.Click += (a, b) => Radio_Click(a, key);

最后組合Where語句:

void DoQuery()
{
    var search = datas.Where(filterMajor).Where(filterScore).ToList();
    dataGridView1.DataSource = search;
}

源代碼:FilterSearch.rar。運行環境.net 4.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM