如何重用已在其他类库中定义的 LINQ 方法

本文关键字:定义 LINQ 方法 类库 何重用 其他 | 更新日期: 2023-09-27 18:35:39

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

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

A.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
                 }
  }
}

如何重用已在其他类库中定义的 LINQ 方法

这不是问题,因为您有 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
                 }
  }
}

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

最直接的方法是:

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)
                 }
  }
}