0

以下の関数を使用してグリッドビューをフォームにロードしています

private DataClasses1DataContext db_cooperations = new DataClasses1DataContext();
private int numberOfObjectsPerPage = 20;
private int CurrentPageIndex = 1;

Func<IEnumerable<cooperations>, IEnumerable<cooperations>> ordering = t => t.OrderBy(i => i.name);

private void daftarKoperasi_Load(object sender, EventArgs e)
{
    GetData(CurrentPageIndex);
    dataGridProperty();
}

 private void GetData(int page)
{
    page = page - 1;
    db_cooperations.Log = Console.Out;  

    var query = (from c in ordering(db_cooperations.cooperations)
                select new { c.id, c.name, c.phone, c.email, c.city })
                .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage).ToList();


    dataGridView1.DataSource = query ;
}

次に、名前に基づいてデータを検索し、同時に都市をフィルタリングします。さらに何をすべきか手がかりはありますか?

アップデート

だから私は次のように私のコードを更新します

private void GetData(int page)
{
    page = page - 1;
    db_cooperations.Log = Console.Out;  

    var query = (from c in ordering(db_cooperations.cooperations)
                select new { c.id, c.name, c.phone, c.email, c.city })
                .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage).ToList();


    if (String.IsNullOrEmpty(searchTxt.Text) == false)
    {
        query.Where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower()));
    }

    if (cityCB.SelectedIndex > -1)
        {
        query.Where(c => c.city.ToLower().Equals(cityCB.Text.ToLower()));
    }

    dataGridView1.DataSource = query ;
}

しかし、それはまだ機能しません

4

3 に答える 3

1

に基づいてデータをフィルタリング(検索)するためにname、同時にLinq から Sql へcityのフィルタリングを行います。

C# と.Contains ではasまたはを表す whichor 演算子を使用して、 as ofを表します。LINQ Contains Case Insensitiveを使用したフィルタリングの良い例を次に示します。SQL|| |LIKESQL.Contains

        var query = (from c in ordering(db_cooperations.cooperations)
                     select new { c.id, c.name, c.phone, c.email, c.city })
                     .where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower()) || 
                            c => c.city.ToLower().Contains(searchTxt.Text.ToLower()))
            .Skip(numberOfObjectsPerPage * page).Take(numberOfObjectsPerPage).ToList();

PS: 質問を見逃してしまうかもしれませんが、次のようになります。

.where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower()) && 
                                c => c.city == cityCB.Text)

編集:

あなたのアップデートから、

   if (String.IsNullOrEmpty(searchTxt.Text) == false)
    {
      query = query.Where(c => c.name.ToLower().Contains(searchTxt.Text.ToLower())).ToList();
    }

    if (cityCB.SelectedIndex > -1)
    {
       query =  query.Where(c => c.city.ToLower().Equals(cityCB.Text.ToLower())).ToList();
    }
于 2013-01-27T20:13:11.447 に答える
1

linq ステートメントに where 句を追加します。

ところで: 順序付け、フィルタリング、投影はすべてメモリ内で行われます。IEnumerable<Corproations>の代わりに を使用しているため、これを適用する前にレコード セット全体をメモリにロードしていますIQueryable<Corporations>

(from c in db_cooperations.cooperations 
where c.Name == name && c.City == city
order by c.Name)
.Skip(pagesize * page).Take(pagesize).AsEnumerable();
于 2013-01-27T16:28:29.653 に答える