return 来自 join 的组合实体
return combined entity from join
是否可以 return 单个对象,它由使用 EF6 的两个实体之间的连接组成?
这是我的意思的一个例子,但是,我不知道要使用什么类型,select 或 return 以获得组合数据集...所以我有表示那些使用 ??????在示例中。
public static ?????? GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
?????? retval = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select ????).FirstOrDefault();
return retval;
}
}
您应该为 return 创建自己的类型。
public class MyReturnType
{
public Application App { get; set; }
public License License { get; set; }
}
public static MyReturnType GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
var retval = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select new MyReturnType
{
App = t,
License = l
}).FirstOrDefault();
return retVal;
}
}
如果你已经正确配置了外键,你应该不需要做一个显式连接,并且可以做这样的事情。
public static Application GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
var application = (from t in db.Applications
where t.AppID == item.UID
select new MyReturnType)
.Include(x => x.License)
.FirstOrDefault();
//application should have a .License property.
return application;
}
}
如果您不想创建新类型,您也可以使用 Tuple
:
public static Tuple<Application, License> GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
var tuple = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select Tuple.Create(t, l))
.FirstOrDefault();
return tuple;
//access the items in the tuple like this: tuple.Item1; tuple.Item2;
}
}
public static CombinedDto GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
CombinedDto retval = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select(b=>new CombinedDto { ApplicationId = t, LicenceId = item})).FirstOrDefault();
return retval;
}
}
publi class CombinedDto()
{
public Application Application {get;set;}
public Licence Licence {get;set;}
}
使用 dto 或匿名对象。我认为这会更好。
谢谢。
是否可以 return 单个对象,它由使用 EF6 的两个实体之间的连接组成?
这是我的意思的一个例子,但是,我不知道要使用什么类型,select 或 return 以获得组合数据集...所以我有表示那些使用 ??????在示例中。
public static ?????? GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
?????? retval = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select ????).FirstOrDefault();
return retval;
}
}
您应该为 return 创建自己的类型。
public class MyReturnType
{
public Application App { get; set; }
public License License { get; set; }
}
public static MyReturnType GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
var retval = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select new MyReturnType
{
App = t,
License = l
}).FirstOrDefault();
return retVal;
}
}
如果你已经正确配置了外键,你应该不需要做一个显式连接,并且可以做这样的事情。
public static Application GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
var application = (from t in db.Applications
where t.AppID == item.UID
select new MyReturnType)
.Include(x => x.License)
.FirstOrDefault();
//application should have a .License property.
return application;
}
}
如果您不想创建新类型,您也可以使用 Tuple
:
public static Tuple<Application, License> GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
var tuple = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select Tuple.Create(t, l))
.FirstOrDefault();
return tuple;
//access the items in the tuple like this: tuple.Item1; tuple.Item2;
}
}
public static CombinedDto GetAppDetails(AppsLight item)
{
using (ApplicationEntities db = new ApplicationEntities())
{
CombinedDto retval = (from t in db.Applications
join g in db.Licenses on t.LicenseID equals g.LicenseID
where t.AppID == item.UID
select(b=>new CombinedDto { ApplicationId = t, LicenceId = item})).FirstOrDefault();
return retval;
}
}
publi class CombinedDto()
{
public Application Application {get;set;}
public Licence Licence {get;set;}
}
使用 dto 或匿名对象。我认为这会更好。 谢谢。