【问题标题】:AsEnumerable and AsQueryable which one should be used in Client - WCF ServiceAsEnumerable 和 AsQueryable 应该在客户端中使用哪一个 - WCF 服务
【发布时间】:2016-04-20 05:40:11
【问题描述】:

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

让我知道在 Client 中哪个更可取?请解释这两个语句的操作区别。

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

【问题讨论】:

    标签: c# linq


    【解决方案1】:

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

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

    你可以找到一个很好的解释 AsQueryable() 所做的正确 here。基本上,你知道你有一个内存集合,你的操作不需要IQueryable&lt;&gt;,在这里调用AsQueryable()对你没有任何帮助。

    【讨论】:

    • 如果我在结果和 where 条件之间使用了 AsQueryable()。这是什么意思 ?如果它是一个 db 意味着它将创建一个 SQL 语法。但在这里它做了什么?你能解释一下吗...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多