AsEnumerable 和 AsQueryable 应在客户端 - WCF 服务中使用哪一个

本文关键字:服务 哪一个 WCF AsQueryable 客户端 AsEnumerable | 更新日期: 2024-10-26 01:37:51

我有一个服务,它返回类型为 List<Boss> 的数据。

这个问题完全取决于服务调用,而不是数据库上下文

模型类是

public class Boss
{
    public int ID { get; set; }
    public int SID { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
    public string Gender { get; set; }
    public string Role { get; set; }
    public List<Person> Employees { get; set; }
}
public class Person
{
    public int ID { get; set; }
    public int SID { get; set; }
    public string Name { get; set; }
    public string Department { get; set; }
    public string Gender { get; set; }
    public string Role { get; set; }
    public List<PayrollInfo> PayInfo { get; set; }
}
public class PayrollInfo
{
    public int Monthof2015 { get; set; }
    public int NetWorkingDays { get; set; }
    public int AbsentDays { get; set; }
}

想象一下服务

[OperationContract]
List<Boss> GetDataMale();

方法的概述应该是

public List<Boss> GetDataMale()
{
    using(var db = new DBContext)
    {
        return db.Boss.Where(x => x.Gender == "Male").ToList();
    }
}

现在考虑客户端:

using(var client = new ServiceProvider())
{
    var bListEnum = client.GetDataMale().AsEnumerable().Where(m => m.Role == "Manager");
    var bListQuery = client.GetDataMale().AsQueryable().Where(m => m.Role == "Manager");
}

让我知道客户端中哪一个更可取?请解释这两种说法在操作上的区别。

    var bListEnum = client.GetDataMale().AsEnumerable().Where(m => m.Role == "Manager");
    var bListQuery = client.GetDataMale().AsQueryable().Where(m => m.Role == "Manager");

AsEnumerable 和 AsQueryable 应在客户端 - WCF 服务中使用哪一个

您的服务器返回一个列表。在客户端,这将转换为List<>或数组。但两者都已经实现了IEnumerable<>所以答案是:两者都不是。放下它。

var managers = client.GetDataMale().Where(m => m.Role == "Manager");

你可以在这里找到一个非常好的解释AsQueryable()做什么。基本上,如您所知,您有一个内存中集合并且您的操作不需要IQueryable<>,在这里调用AsQueryable()对您没有任何作用。