2015-04-02 64 views
0

是否有可能返回一个单个对象,该对象由使用EF6的两个实体之间的连接组成?返回合并实体加入

这是我的意思,但是,我不知道什么类型的使用,选择或返回,以获得组合数据集的例子...所以我已经表明这些使用??? ???在这个例子中。

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; 

     } 
    } 

回答

1

您应该创建自己的类型以返回。

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; 
    } 
} 
+0

我的问题是数据库不是我的,并且在表格之间创建了基本上为零的关系...而是设计者将后缀名为“_FK”的字段命名为表示与其他表格的关系。真的很伤心,但我不拥有它,所以我无法对约束或关系做任何事情。我会测试你的解决方案,并让你知道很快! :) – MaxOvrdrv 2015-04-02 14:25:23

+0

工作得很好!谢谢! – MaxOvrdrv 2015-04-02 18:24:58

0
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,或anonymus对象。我认为这会更好。 谢谢。