2011-11-02 28 views
0

遵循幾個不同的教程,我一直試圖針對我創建的數據庫構建「Silverlight業務應用程序」。我發現我有兩個問題。我在這裏詢問的是如何過濾查詢。RIA DomainService IQueryable - 請選擇

是建在的DomainService使用VS2010模板時,查詢是:

[EnableClientAccess] 
public class ChargesService : LinqToEntitiesDomainService<ChargesEntities> 
{ 
    public IQueryable<tblChargeCode> GetCharges() 
    { 
     return ObjectContext.tblChargeCodes.OrderBy(e => e.Chrgs_Code_01).Take(10); 
    } 
} 

我試圖創建針對同一ObjectContext.tblChargeCodes另一個查詢。拉整個表(30行〜7k行)會產生超時錯誤。

我無法弄清楚如何做選擇。我想選擇Charge_Codes_01和Bill_Description並帶有「開始」類型的功能(動態下拉搜索功能)。我嘗試過不同的變化,但沒有成功。有些東西不是在我的大腦中點擊。

public IQueryable<tblChargeCode> SearchCharges(string num) 
    { 
     var min = System.Convert.ToInt32(num.PadRight(7, '0')); 
     var max = System.Convert.ToInt32(num.PadRight(7, '9')); 
     return ObjectContext.tblChargeCodes 
      .Select(e => e.Chrgs_Code_01, e.Chrgs_Code_01_Desc) 
      .Where(e => e.Chrgs_Code_01 >= min && e.Chrgs_Code_01 <= max) 
      .OrderBy(e => e.Chrgs_Code_01) 
      .Take(10); 
    } 

回答

1

(對不起我的英文不好)

與你代碼的問題是「選擇」 - 你的方法的簽名說,它必須返回tblChargeCode的IQueryable的,所以你不能返回一個投影。下面是兩種方法,你可以寫你的查詢:

在服務器:

public IQueryable<tblChargeCode> SearchCharges(int min, int max, string description) 
{   

    return ObjectContext.tblChargeCodes    
     .Where(e => e.Chrgs_Code_01 >= min && e.Chrgs_Code_01 <= max) 
     .Where(e => e.Bill_Description.StartsWith(description)) 
     .OrderBy(e => e.Chrgs_Code_01) 
     .Take(10); 
} 

,並調用它的客戶端上:

context.Load(context.SearchChargesQuery(0, 9999999, "Bill"), (op) => 
{ 
    //op.Entities has your entities loaded 
}, null); 

或者,你可以在服務器上保留查詢:

public IQueryable<tblChargeCode> GetCharges() 
{ 
    return ObjectContext.tblChargeCodes.OrderBy(e => e.Chrgs_Code_01); 
} 

並從客戶端調用(它會在服務器上過濾)

context.Load(context.GetChargesQuery().Where(e => e.Chrgs_Code_01 >= 0 && e.Chrgs_Code_01 <= 9999999) 
     .Where(e => e.Bill_Description.StartsWith("Bill")) 
     .OrderBy(e => e.Chrgs_Code_01) 
     .Take(10), (op) => 
     { 
      //op.Entities has your entities loaded 
     }, null); 

您也可以在查詢中使用「Contains」而不是「StartsWith」。

+0

如果你不想返回整個實體看看這個答案:http://stackoverflow.com/questions/7864825/how-to-select-fields-from-table-in-wcf-ria-服務/ 7869189#7869189 – Leo

相關問題