繁体   English   中英

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

[英]AsEnumerable and AsQueryable which one should be used in Client - WCF Service

我有一个服务,它返回类型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"); 

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

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

您可以在此处找到关于AsQueryable()很好的解释。 基本上,您知道您有一个内存中的集合,并且您的操作不需要IQueryable<> ,在这里调用AsQueryable()不会为您做任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM