私はフィルタリングデータを運ぶために使用されるクラスを持っています。私はフィルタリングオプションに基づいてデータベースからデータを取得したい。 マイFilteringDtoクラス:SQLクエリのように条件付きクエリ連結を使用してデータベースからデータを取得する
public class FilteringDto
{
public int id { get; set; }
public string search_text { get; set; }//only for relevant table
public DateTime date_from { get; set; }
public DateTime date_to { get; set; }
}
私はcafe_table_group
テーブルからデータを取得したいです。これは私のクエリのようです:
using (ISession session = SessionFactory.OpenSession)
{
using (ITransaction transaction = session.BeginTransaction())
{
groups = session.CreateCriteria<CafeTableGroup>().List<CafeTableGroup>();
if (string.IsNullOrEmpty(filters.search_text))
{
groups = groups.Where(a => a.cafe_table_group_name.Like(filters.search_text)).ToList();
}
if (filters.id != 0)
{
groups = groups.Where(a => a.cafe_table_group_id == filters.id).ToList();
}
transaction.Commit();
}
}
私はここで問題があります。フィルタリングされたデータを取得するには、まず、テーブル内のすべてのデータを取得し、条件に基づいてフィルタリングします。単一のクエリを使用してそれを実行し、すべてのデータではなくフィルタリングされたデータのみを取得する方法はありますか?前もって感謝します。
私は事を理解しませんでした。 ** NHibernate **は**の後にのみデータを取得します。ToList()**は呼び出されますか? –
はい、あなたは 'List'をあまりに早く呼び出しています。通話を遅らせる。サンプルコードを慎重に読んでください。私がすべてのフィルタを追加すると、最後に 'List'を呼び出します。 –
ありがとうございます。それは私の多くの労力を節約した –