我正在使用mvc3开发一个应用程序。
我有两个下拉菜单,根据第一个下拉列表中选择的值,第二个下拉列表已填充。
第一个下拉列表是课程,在选择的基础上,第二个下拉列表填充了课程可用的状态。
如果课程是“MCA”,那么州应该是马哈拉施特拉邦,拉贾斯坦邦等等。
为此,我写了一个工作正常的ajax函数。
但问题是我无法一次获取多个状态,即我一次只能获取一个状态。
我编写了以下代码来获取州名:
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;
}
答案 0 :(得分: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();
}
...
更新:使用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子句的select,而不是带有一个where子句的多个select。