小编emr*_*can的帖子

C# 在彼此之间转换谓词

我正在开发多层应用程序解决方案,我的解决方案如下所示

  • 业务.域对象
  • Business.Process(*实际业务层)
  • 数据映射器
  • 数据存储库
  • Data.Sql.Entity(* 具有 .dbml 文件的实际数据层)

我的Business.Process项目(业务层)只知道Business.DomainObjectData.Repository项目,因此不知道并且与 Data.Sql.Entity 项目没有关系
我将业务(域)对象发送到存储库并执行在这个项目内部进行映射,然后我在存储库层内使用关系数据层进行 CRUD 过程。

我的传统领域对象是这样的,它只有属性

public class UserBO
{
public string Email { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的业务层类是这样的,

Repository r = new UserRepository();
r.Insert(myUserDomainObject);
Run Code Online (Sandbox Code Playgroud)


一切都很好,但是我的“谓词”查询有一些问题。我的存储库接口中有一个方法

bool IsExists(Expression<Func<BusinessObject,bool>> predicate);
Run Code Online (Sandbox Code Playgroud)

并像这样在我的业务层中使用它;

Repository r = new UserRepository(); <br/>
r.IsExists(p => p.Email.Equals("email address"));
Run Code Online (Sandbox Code Playgroud)

如您所见,它的参数是“业务对象”,但我的实际存储库(与数据库连接)使用我的 dbml 文件内的“数据对象”。

    public override bool IsExists(Expression<Func<DataObject, bool>> predicate){
return …
Run Code Online (Sandbox Code Playgroud)

c# linq predicate linq-to-sql

5
推荐指数
1
解决办法
3976
查看次数

标签 统计

c# ×1

linq ×1

linq-to-sql ×1

predicate ×1