0

我正在 mvc3 中开发一个应用程序。
我有两个下拉列表,并根据在第一个下拉列表中选择的值填充第二个下拉列表。第一个下拉菜单是课程,根据选择的课程,第二个下拉菜单会填充课程可用的状态。

例如,如果课程是“MCA”,则州应该是马哈拉施特拉邦、拉贾斯坦邦等。为此,我编写了一个运行良好的 ajax 函数。但问题是我无法一次获取多个状态,即我一次只能获取一个状态。

我编写了以下代码来获取状态名称:

HobbyHomeAdress 表包含我通过其他方法获取的ProvincialStateID。然后我将该值与ProvincialStateID 中ProvincialState 表中的值进行比较并获取该表的数据,但它只给了我最后一条记录。

 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 中的每个州重新创建省级集合。因此,您最终会得到一个包含单个条目的集合,通常是最后一个条目。相反,您应该预先创建集合,并在检索项目后将其添加到该集合中。

...剪辑

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

    }
    ...

更新:使用析取的单个查询。

    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 子句的单个 select,而不是带有单个 where 子句的多个 select。

于 2012-04-13T06:18:47.567 回答