Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架在IQueryable方法执行之前在其内部具体化集合_C#_Entity Framework 6_Ienumerable - Fatal编程技术网

C# 实体框架在IQueryable方法执行之前在其内部具体化集合

C# 实体框架在IQueryable方法执行之前在其内部具体化集合,c#,entity-framework-6,ienumerable,C#,Entity Framework 6,Ienumerable,在我以前的工作中,EF将查询保持为IQueryable,直到我使用了一些具体化的方法,例如,ToList()或FirstOrDefault(),我可以创建大的、灵活的和快速的查询。但在我的新工作中,我注意到,IQueryable方法中的序列有ICollection类型,当然,它们有IEnumerable方法(不是IQueryable)。我不明白哪里错了,我怎样才能改变它。我还没有在谷歌找到解决方案。EF的版本与我之前的工作(6.1.3)相同 例如,我有2个实体类和我自己的类: public cl

在我以前的工作中,EF将查询保持为
IQueryable
,直到我使用了一些具体化的方法,例如,
ToList()
FirstOrDefault()
,我可以创建大的、灵活的和快速的查询。但在我的新工作中,我注意到,
IQueryable
方法中的序列有
ICollection
类型,当然,它们有
IEnumerable
方法(不是
IQueryable
)。我不明白哪里错了,我怎样才能改变它。我还没有在谷歌找到解决方案。EF的版本与我之前的工作(6.1.3)相同

例如,我有2个实体类和我自己的类:

public class Client // Entity
{
    public int ID { get; set; }
    public string FullName { get; set; }
    public string Address { get; set; }
    ...
    public virtual ICollection<Parcel> ParcelsSender { get; set; }
    public virtual ICollection<Parcel> ParcelsReceiver { get; set; }
}

public class Parcel // Entity
{
    public int ID { get; set; }
    public string ParcelNumber { get; set; }
    ...
    public int ClientSenderID { get; set; }
    public int ClientReceiverID { get; set; }
    public virtual Client ClientSender { get; set; }
    public virtual Client ClientReceiver { get; set; }
}

public class ClientCustom // My class
{
    public int ID { get; set; }
    public string FullName { get; set; }
    public bool IsInexperienced { get; set; }
}

在这种情况下,问题是查询中的
x.ParcelsSender
x.ParcelsReceiver
ICollection
类型;依次,
x.ParcelsSender.Select()
x.ParcelsReceiver.Select()
方法返回
IEnumerable
,而不是
iQuery
。据我所知,这意味着,查询在处理大量数据时变得非常缓慢。

寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。您使用的是代码优先方法还是数据库优先方法,如果第一种方法在这里提供了DbContext中的一些代码,这样我们就可以看到您在谈论集合导航属性时发生了什么?你真的需要展示一些例子来看看问题是什么(如果有问题的话)。现在看看这个问题。这不是问题。整个LINQ查询被转换为SQL。投票关闭,因为不可复制。
var clients = context.Clients
    .OrderBy(x => x.FullName)
    .Select(x => new ClientCustom()
    {
        ID = x.ID,
        FullName = x.FullName,
        IsInexperienced = x.ParcelsSender.Select(y => y.ID).FirstOrDefault() == 0 
            && x.ParcelsReceiver.Select(y => y.ID).FirstOrDefault() == 0
    })
    .ToList();