在存储库模式中编写 Get 方法

发布于 2024-12-25 16:52:25 字数 628 浏览 0 评论 0原文

我是业务层EntityFreamework中的存储库模式的初学者,

我有获取方法

public IQueryable<Contract> GetAll()
{
    var repository = new ContractsRepository(this.Context);
    return repository.GetAll();
}

public IQueryable<Contract> GetAll(Func<Contract, bool> predicate)
{
    var repository = new ContractsRepository(this.Context);
    return repository.GetAll(predicate);
}

这些都很好,但是我想在函数返回值时在字段上进行计算做什么?

例如,我有2个表表1和表2

  • 表1有字段1和字段2
  • 表2有字段3和字段4。

我想要业务层Table1的Get方法写如下

Field1 ,Field2,Field1+Field3,Field2+Field4

谢谢

i'm starter in Repository Pattern in EntityFreamework in Bussiness Layer

i Have Get Methods

public IQueryable<Contract> GetAll()
{
    var repository = new ContractsRepository(this.Context);
    return repository.GetAll();
}

public IQueryable<Contract> GetAll(Func<Contract, bool> predicate)
{
    var repository = new ContractsRepository(this.Context);
    return repository.GetAll(predicate);
}

These are good,But I want to do computing on the field when a function return value to do what?

For example, I have 2 tables Table 1 and Table 2

  • Table1 have a Field1 and Field 2
  • Table2 have Field3 and Field4.

I want the Bussiness layer Table1 Get method to write the following

Field1 ,Field2,Field1+Field3,Field2+Field4

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不如归去 2025-01-01 16:52:25

我不同意托尼·霍普金森的评论。您不应该Contact 类添加只读属性,因为这样的属性不能在 LINQ to Entities 中使用,因此不适合返回IQueryable

相反,执行如下操作:

    public IQueryable<ContractSumsModel> GetSums()
    {
        var repository = new ContractsRepository(this.Context);
        return from c in repository.GetAll()
               select new ContractSumsModel
               {
                   Field1 = c.Field1,
                   Field2 = c.Field2,
                   Fields1and3 = Field1 + Field3,
                   Fields2and4 = Field2 + Field4
               };
    }

这样做的好处是您可以进一步编写查询:

var q = MyBusinessLayer.GetSums().OrderBy(c => c.Fields1and3).Take(5);

...整个过程都是在 SQL 中完成的。

I disagree with Tony Hopkinson's comment. You should not add a read-only property to your Contact class, because such a property cannot be used in LINQ to Entities, and hence aren't suitable for methods which return IQueryable.

Instead, do something like:

    public IQueryable<ContractSumsModel> GetSums()
    {
        var repository = new ContractsRepository(this.Context);
        return from c in repository.GetAll()
               select new ContractSumsModel
               {
                   Field1 = c.Field1,
                   Field2 = c.Field2,
                   Fields1and3 = Field1 + Field3,
                   Fields2and4 = Field2 + Field4
               };
    }

The nice thing about this is that you can further compose the query:

var q = MyBusinessLayer.GetSums().OrderBy(c => c.Fields1and3).Take(5);

...and the whole thing is done in SQL.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文