0

mvc3 でアプリケーションを開発しています。
2 つのドロップダウンがあり、最初のドロップダウンで選択された値に基づいて、2 番目のドロップダウンが入力されます。最初のドロップダウンはコースで、選択されたコースに基づいて、2 番目のドロップダウンはコースが利用可能な州を入力します。

たとえば、コースが「MCA」の場合、州はマハラシュトラ州、ラジャスタン州などになります。このために、正常に動作する ajax 関数を作成しました。しかし問題は、一度に複数の状態をフェッチできないことです。つまり、一度に 1 つの状態しかフェッチできません。

州名を取得するために次のコードを作成しました。

HobbyHomeAdress テーブルには、他の方法で取得した ProvincialStateID が含まれています。次に、その値を ProvincialState テーブルの ProvincialStateID の値と比較し、そのテーブルのデータを取得しますが、最後のレコードのみが得られます。

 public ICollection<ProvincialState> FetchStateByStateid(ICollection<HobbyHomeAddress> hobbyhomeaddresslist)
    {
        log.Debug("Start");
        ISession session = DataAccessLayerHelper.OpenWriterSession();
        ITransaction transaction = session.BeginTransaction();
        ICollection<ProvincialState> provincialstate = null;
        try
        {
            foreach (var state in hobbyhomeaddresslist)
            {
                provincialstate = session.CreateCriteria(typeof(ProvincialState))
                                .Add(Expression.Eq("ProvincialStateID", state.ProvincialState.ProvincialStateID))
                                .List<ProvincialState>();
            }
            transaction.Commit();

        }
        catch (SessionException ex)
        {
            if (transaction != null && transaction.IsActive)
                transaction.Rollback();

            log.Error(ex);
            provincialstate = null;
        }
        finally
        {
            if (transaction != null)
                transaction.Dispose();

            if (session != null && session.IsConnected)
                session.Close();

            log.Debug("End");
        }
        return provincialstate;
    }
4

1 に答える 1

1

Hobbyhomeaddresslist の各州の provincialstate コレクションを再作成しています。したがって、単一のエントリ (通常は最後のエントリ) を持つコレクションになります。代わりに、事前にコレクションを作成し、アイテムを取得した後、そのコレクションに追加するだけです。

...をちょきちょきと切る

    ...
    List<ProvincialState> provincialstate = new List<ProvincialState>();
    try
    {
        foreach (var state in hobbyhomeaddresslist)
        {

            var list = session.CreateCriteria(typeof(ProvincialState))
                            .Add(Expression.Eq("ProvincialStateID",       state.ProvincialState.ProvincialStateID))
                            .List<ProvincialState>();
            provincialstate.AddRange(list);
        }
        transaction.Commit();

    }
    ...

更新: Disjunction を使用した単一のクエリ。

    IList<ProvincialState> provincialstate = null;
    Disjunction dj = new Disjunction();    
    try
    {
        foreach (var state in hobbyhomeaddresslist)
        {
            dj.Add(Expression.Eq("ProvincialStateID",       state.ProvincialState.ProvincialStateID));
        }
        provincialstate = session.CreateCriteria(typeof(ProvincialState))
                       .Add(dj)
                       .List<ProvincialState>();

        transaction.Commit();

    }

生成された SQL を見ると、単一の where 句を使用した複数の選択ではなく、複数の where 句を使用した単一の選択が表示されるはずです。

于 2012-04-13T06:18:47.567 に答える