0

我有两个数据访问类库,A.csproj 和 B.csproj。每个都有一个 edmx。这两个 edmx 包含来自两个不同数据库的实体。A.csproj 引用 B.DLL。A.csproj 中的类 A 使用 LINQ 查询 A.edmx 中的实体以返回 IEnumerable<dtoResultA>。B.csproj 到 B.edmx 中的 B 类也返回 IEnumerable<dtoResultB>。

我应该怎么做才能直接调用 B.csproj 中定义的 getUserBenefitDetail() 作为 classA.getUserStuff() 的 LINQ 查询的一部分?

csproj

public class dtoResultA{
      int userID {get;set;}
      IEnumerable<userPermissions> permissions{get;set;}
      IEnumerable<dtoResultB> benefits{get;set;}
}  

public class A{
  public IEnumerable<dtoResultA> getUserStuff(int UserId){
    var result = from p in contextA.userPermission.Where(x=>x.userId = UserId)
                 let b = getUserBenefitDetail(UserId) /*<--not sure how */
                 select new dtoResultA{
                   userID = c.userId,
                   permissions = p,
                   benefits = b
                 }
  }
}

B.csproj

public class B{
  public IEnumerable<dtoResultB> getUserBenefitDetail(int UserId){
    var result = from b in contextB.benefits.Where(x=>x.userId = UserId)
                 select new dtoResultB{
                   userID = c.userId,
                   benefits = b,
                   beneficiaries = b.beneficiaries
                 }
  }
}
4

2 回答 2

0

最直接的方法是:

public class A{
  public IEnumerable<dtoResultA> getUserStuff(int UserId){
    var result = from p in contextA.userPermission.Where(x=>x.userId = UserId)
                 select new dtoResultA{
                   userID = c.userId,
                   permissions = p,
                   benefits = getUserBenefitDetail(UserId)
                 }
  }
}
于 2013-10-17T06:53:37.713 回答
0

这不是问题,因为您有 2 个项目。这是一个问题,因为您定义了一个带有方法的类 B,但是您没有 B 的实例,并且您需要一个实例来调用方法。

您可以选择创建 B 的实例,或者使您的方法静态。静态方法可以在没有实例的情况下调用,它不再是真正的方法,它更像是一个函数。

有一个实例:

public class A
{
  public IEnumerable<dtoResultA> getUserStuff(int UserId)
  {
    var bInstance = new B();
    var result = from p in contextA.userPermission.Where(x=>x.userId = UserId)
                 let b = bInstance.getUserBenefitDetail(UserId)
                 select new dtoResultA
                 {
                   userID = c.userId,
                   permissions = p,
                   benefits = b
                 }
  }
}

使用静态类:

public class B
{
  public static IEnumerable<dtoResultB> getUserBenefitDetail(int UserId)
  {
    return stuff.....
  }
}

public class A
{
  public IEnumerable<dtoResultA> getUserStuff(int UserId)
  {
    var result = from p in contextA.userPermission.Where(x=>x.userId = UserId)
                 let b = B.getUserBenefitDetail(UserId)
                 select new dtoResultA
                 {
                   userID = c.userId,
                   permissions = p,
                   benefits = b
                 }
  }
}

从面向对象的角度来看,什么是有意义的,什么是没有意义的,这取决于你。

于 2013-10-17T15:21:33.040 回答