Asp.net mvc 3 如何使用distinct关键字筛选对象
我有一个项目列表,在那里我可以得到关于项目的所有细节。在项目类中,我在项目中有customer对象,我只想根据customer筛选该列表。我怎样才能做到这一点Asp.net mvc 3 如何使用distinct关键字筛选对象,asp.net-mvc-3,nhibernate,Asp.net Mvc 3,Nhibernate,我有一个项目列表,在那里我可以得到关于项目的所有细节。在项目类中,我在项目中有customer对象,我只想根据customer筛选该列表。我怎样才能做到这一点 public ICollection<Project> GetProjectBasicDetailsByProjectTypeCustomerID(ProjectType projectType, string custName, string cordinatorName, string projectName) {
public ICollection<Project> GetProjectBasicDetailsByProjectTypeCustomerID(ProjectType projectType, string custName, string cordinatorName, string projectName)
{
oLog.Debug("Started");
ISession session = DataAccessLayerHelper.OpenReaderSession();
ITransaction transaction = null;
ICollection<Project> projectList = null;
try
{
transaction = session.BeginTransaction();
ICriteria criteria = session.CreateCriteria(typeof(Project),"Project")
.CreateAlias("Project.customer","customer",NHibernate.SqlCommand.JoinType.InnerJoin)
.CreateAlias("Project.Coordinator", "Coordinator", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.Eq("Project.ProjectType", projectType));
projectList = criteria.List<Project>().ToList();
session.Flush();
transaction.Commit();
}
catch (Exception ex)
{
if (transaction != null && transaction.IsActive)
transaction.Rollback();
oLog.Error(ex);
}
finally
{
if (transaction != null)
transaction.Dispose();
if (session != null && session.IsConnected)
session.Close();
}
oLog.Debug("End");
return projectList;
}
public ICollection GetProjectBasicDetailsByProjectTypeCustomerID(项目类型ProjectType、字符串custName、字符串cordinatorName、字符串projectName)
{
调试(“启动”);
ISession session=DataAccessLayerHelper.OpenReaderSession();
ITransaction事务=null;
ICollection projectList=null;
尝试
{
事务=session.BeginTransaction();
ICriteria标准=session.CreateCriteria(项目类型),“项目”)
.CreateAlias(“Project.customer”、“customer”、NHibernate.SqlCommand.JoinType.InnerJoin)
.CreateAlias(“Project.Coordinator”、“Coordinator”、NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.Eq(“Project.ProjectType”,ProjectType));
projectList=criteria.List().ToList();
session.Flush();
Commit();
}
捕获(例外情况除外)
{
if(transaction!=null&&transaction.IsActive)
transaction.Rollback();
光学误差(ex);
}
最后
{
if(事务!=null)
transaction.Dispose();
if(session!=null&&session.IsConnected)
session.Close();
}
调试(“结束”);
返回项目列表;
}
如果我理解正确,您希望从您的项目中获得不同的客户吗
在这种情况下,我认为类似的方法应该会起作用(这将根据此标准为您提供dictinct项目ID-也许有一种直接获取项目的方法-但我现在无法测试:
ICriteria criteria = session.CreateCriteria(typeof(Project),"Project")
.SetProjection(Projections.Distinct(Projections.Property("project.Id")))
.CreateAlias("Project.customer","customer",NHibernate.SqlCommand.JoinType.InnerJoin)
.CreateAlias("Project.Coordinator", "Coordinator", NHibernate.SqlCommand.JoinType.InnerJoin)
.Add(Restrictions.Eq("Project.ProjectType", projectType));
您能提供一些代码、控制器操作、过滤逻辑等吗?因为根据您当前的描述很难提供帮助。@nemesv我已经发布了我使用的服务……这里我想根据客户而不是项目来过滤列表……NHibernate参考资料的第15章涉及标准API,第15.4节特别涉及as社交:你试过这个吗?到底是什么不起作用?