C# 4.0 RIA域服务IQueryable-选择

C# 4.0 RIA域服务IQueryable-选择,c#-4.0,silverlight-4.0,ria,iqueryable,C# 4.0,Silverlight 4.0,Ria,Iqueryable,在两个不同的教程之后,我一直在尝试根据我创建的数据库构建一个“Silverlight业务应用程序”。我发现我有两个问题。这里我要问的是如何过滤查询 使用VS2010模板时,在DomainService中生成的查询为: [EnableClientAccess] public class ChargesService : LinqToEntitiesDomainService<ChargesEntities> { public IQueryable<tblChargeCod

在两个不同的教程之后,我一直在尝试根据我创建的数据库构建一个“Silverlight业务应用程序”。我发现我有两个问题。这里我要问的是如何过滤查询

使用VS2010模板时,在DomainService中生成的查询为:

[EnableClientAccess]
public class ChargesService : LinqToEntitiesDomainService<ChargesEntities>
{
    public IQueryable<tblChargeCode> GetCharges()
    {
        return ObjectContext.tblChargeCodes.OrderBy(e => e.Chrgs_Code_01).Take(10);
    }
}
[EnableClientAccess]
公共类收费服务:LinqToEntitiesDomainService
{
公共IQueryable GetCharges()
{
返回ObjectContext.tblChargeCodes.OrderBy(e=>e.Chrgs\u Code\u 01).Take(10);
}
}
我正在尝试针对同一ObjectContext.tblChargeCodes创建另一个查询。拉动整个表(30列约7k行)会产生超时错误

我想不出如何做选择。我想选择带有“从开始”类型功能(动态下拉搜索功能)的费用代码和账单说明。我尝试过不同的版本,但没有成功。我脑子里有点不对劲

    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);
    }
public IQueryable SearchCharges(string num)
{
var min=System.Convert.ToInt32(num.PadRight(7,'0');
var max=System.Convert.ToInt32(num.PadRight(7,'9');
返回ObjectContext.tblChargeCodes
.选择(e=>e.Chrgs\U代码\U 01,e.Chrgs\U代码\U 01\U描述)
其中(e=>e.Chrgs\U代码\U 01>=min和&e.Chrgs\U代码\U 01 e.Chrgs\U代码\U 01)
.采取(10);
}
(很抱歉我的英语不好)

代码的问题在于“选择”——方法签名表示它必须返回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);
}
public IQueryable<tblChargeCode> GetCharges()
{
    return ObjectContext.tblChargeCodes.OrderBy(e => e.Chrgs_Code_01);
}
或者,您可以将查询留在服务器上:

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);
}
public IQueryable<tblChargeCode> GetCharges()
{
    return ObjectContext.tblChargeCodes.OrderBy(e => e.Chrgs_Code_01);
}
public IQueryable GetCharges()
{
返回ObjectContext.tblChargeCodes.OrderBy(e=>e.Chrgs\u Code\u 01);
}
并从客户端调用它(它将在服务器上进行筛选)

context.Load(context.GetChargesQuery()。其中(e=>e.Chrgs\u code\u 01>=0&&e.Chrgs\u code\u 01 e.Bill\u Description.StartsWith(“Bill”))
.OrderBy(e=>e.Chrgs\u Code\u 01)
.取(10),(op)=>
{
//操作实体已加载实体
},空);

您还可以在查询中使用“Contains”而不是“StartsWith”。

如果您不想返回整个实体,请查看以下答案: