将Orberby用于ICollection的<>上的数据库级或应用级执行(Will th

2019-10-16 19:56发布

我工作的一个asp.net MVC 3 web应用程序,和我有我的.TT文件夹内的folloiwng模型类: -

public partial class Patient
{
    public Patient()
    {
        this.Visits = new HashSet<Visit>();
    }

    public int PatientID { get; set; }
   //code goes here...
    public virtual Gender Gender { get; set; }
    **public virtual ICollection<Visit> Visits { get; set; }**

然后在Controller类我写了以下内容: -

public PartialViewResult ShowOther(int id, int skip, int take )
        {
                ViewBag.take = take;
                Patient patient = repository.GetPatient(id);
               **Visit visit = patient.Visits.OrderByDescending(d => d.Date).Skip(skip).Take(take).SingleOrDefault();**
//code goes here

所以我的问题如果阉羊以下ORDERBY patient.Visits.OrderByDescending(d => d.Date).Skip(skip).Take(take).SingleOrDefault(); 在应用程序级别(这意味着所有的访问对象将被从数据库retrived,然后排序依据将在应用层完成)执行排序依据将在数据库上执行,只有预期的访问对象将被传递到应用程序?

repository.GetPatient(id); 方法如下如下: -

 public Patient GetPatient(int id)
        {
            return entities.Patients.FirstOrDefault(d => d.PatientID == id);        }

BR

Answer 1:

一旦你进入patient.Visits延迟加载会加载到你的应用程序的所有访问。 一切都将在你的应用程序来完成。

如果您想要只载入一次访问你试试这个:

entities.ContextOptions.LazyLoadingEnabled = false;
var patient = entities.Patients.FirstOrDefault(d => d.PatientID == id);
var visit = ((EntityCollection<Visit>)patient.Visists).CreateSourceQuery()
                                                      .OrderByDescending(d => d.Date)
                                                      .SingleOrDefault();
                                                      .


Answer 2:

在致电.ToList() .Single() -数据库级。 打完电话后.ToList() .Single()应用水平- 。


在您的具体的例子没关系作为调用FirstOrDefault存储库中的方法执行查询并返回结果。



文章来源: Will the Orberby for an Icollection<> be performed on the database level or application level