gpt4 book ai didi

c# - 将 Func 转换为 Func

转载 作者:行者123 更新时间:2023-11-30 22:14:53 26 4
gpt4 key购买 nike

给定:

class MyDao
{
public int SiteId {get;set;}

public Cv3AddressDao ReadSingle(Expression<Func<Cv3AddressDao, bool>> predicate)
{ //...
}
}

class MyEntity
{
public int SiteId {get;set;}
}

如何获取 Expression<Func<MyDao, bool>> 类型的谓词参数?并将其转换为 Expression<Func<MyEntity, bool>>

我正在寻找的答案类型

请注意,答案必须显示转换的工作原理。我想要一个类似于此但有效的实现:)...

    public MyDao ReadSingle(Expression<Func<MyDao , bool>> predicate)
{
var mappedPredicate = MapFun<MyDao , MyEntity>(predicate);
var result = repository.GetSingle<MyEntity>(mappedPredicate);

return Convert(result);//Converts Entity to Dao...safe to ignore this line
}

Expression<Func<B, bool>> MapFun<A, B>(Expression<Func<A, bool>> input)
{
Expression<Func<B, bool>> result = null;//How to convert?
return result;
}

关于我为什么想要这个设计的详细信息...

这是一个 asp.net MVC 5 应用程序。此转换很重要的原因是我的 View 不知道类型 MyEntity .换句话说,如果我要这样做:

myDaoObject.ReadSingle<MyEntity>(myEntity => myEntity.SiteId == "123");

然后我的 View 层必须引用我的 DLL 层,因为我在这里使用 MyEntity .我希望 View 层改为与 Dao 一起工作:

myDaoObject.ReadSingle<MyDao>(myDao=> myDao.SiteId == "123");

但是,现在我必须转换 Dao 以使其可用于存储库。 Repository 只知道 DL 对象。我试图避免创建一个冗余的存储库来支持这种翻译。 DAO 包含实体的所有属性以及一些。

最佳答案

我手边没有确切的代码,但您可能想要使用提供的表达式并自己执行等价转换。

This stackoverflow question与我将要做的一致。

P.Brian.Mackey 的笔记

引用的答案有效。使用乔恩的答案就可以了。但是,答案的公共(public)部分最终成为 Func<> 的不可见播放器。转换。我只需要:

    Expression<Func<B, bool>> MapFun<A, B>(Expression<Func<A, bool>> input)where A : class
{
var result = DbAccessLayer.TransformPredicateLambda<A,B>(input);
return result;
}

请注意,此方法是私有(private)的。我把它改成了公开的。有关完整实现,请参阅上面引用的答案中的@Jon answer。

public static Expression<Func<TNewTarget, bool>> TransformPredicateLambda<TOldTarget, TNewTarget>(Expression<Func<TOldTarget, bool>> predicate)

关于c# - 将 Func<TDao, bool> 转换为 Func<TEntity, bool>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com