2012-01-09 61 views
0

我是在EntityFreamework庫模式在經營業務層寫GET方法在存儲庫模式

我已經找方法

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具有Field 1和場2
  • 表2有和字段3字段4。

我想經營業務層表1 Get方法如下

Field1 ,Field2,Field1+Field3,Field2+Field4 

感謝

+0

呃剛纔添加的功能/只讀屬性的合同類... – 2012-01-09 11:43:06

+0

請選擇一個例子 – Pouya 2012-01-09 11:45:51

回答

4

我與託尼霍普金森的評論不同意寫。您不應該爲您的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完成。

+0

其中添加字段Fields1and3和Fields2and4 ???????? – Pouya 2012-01-09 16:07:56

+0

它們只是'ContractSumsModel'的可寫屬性,您爲此目的設計的類型。 – 2012-01-09 16:20:00

+0

ContractSumsModel in bussines or models ??????? – Pouya 2012-01-09 16:26:23