如何重用已在其他类库中定义的 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 中定义的 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
}
}
}
这不是问题,因为您有 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)
}
}
}