gpt4 book ai didi

c# - 如何将 System.Data.Entity.Infrastructure.DbQuery 类型转换为 System.Collections.Generic.List 类型?

转载 作者:行者123 更新时间:2023-11-30 20:20:02 25 4
gpt4 key购买 nike

我有两个简单的列表:

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

public int Id { get; set; }
public int PermitId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MiddleName { get; set; }
public bool IsValid { get; set; }
public System.DateTime RegistrationDate { get; set; }
public byte[] Picture { get; set; }
public virtual ICollection<Visit> Visits { get; set; }
}

public partial class Visit
{
public int Id { get; set; }
public int VisitType { get; set; }
public System.DateTime VisitDate { get; set; }
public Nullable<int> Visitor_Id { get; set; }

public virtual Visitor Visitor { get; set; }
}

在 WCF 方法中,我编写了查询并尝试返回结果:

public List<Visitor> AllVisitors()
{
using (var te = new TurnstileDbEntities())
{
te.Configuration.ProxyCreationEnabled = false;


return (List<Visitor>) te.Visitors.SelectMany(visitors => te.Visits
.Where(o => o.Visitor_Id == visitors.Id)
.DefaultIfEmpty(), (visitors, visit) => new {visitors, visit});
}
}

好吧,正如预期的那样,我收到了一个异常:

Additional information: Failed to cast the type of object "System.Data.Entity.Infrastructure.DbQuery1[<>f__AnonymousType02[TurnstileWcfService.Visitor,TurnstileWcfService.Visit]]" to type "System.Collections.Generic.List`1[TurnstileWcfService.Visitor]".

好的。我重写这个。声明新类。

public class JoinResult
{
public Visitor Visitors { get; set; }
public Visit Visits { get; set; }
}

并重写方法。

   public IQueryable AllVisitors()
{
using (var te = new TurnstileDbEntities())
{
te.Configuration.ProxyCreationEnabled = false;

return te.Visitors.Join(te.Visits,
r => r.Id, a => a.Visitor_Id, (r, a) => new JoinResult
{
Visits = a,
Visitors = r
});
}
}

这是可行的,但我想使用 Visitor 类。访客类包含 ICollectionVisits,我想填充它。如何在不声明新类的情况下在 Linq 语句中执行此操作?

我也可以在下面的代码中得到我想要的。但我不喜欢这样。

var visitors = te.Visitors.ToList();
foreach (var item in visitors)
{
item.Visits = te.Visits.Where(v => v.Visitor_Id == item.Id).ToList();
}

最佳答案

Gert Arnold 是对的,试试看:

List<Visitor> visitors = te.Visitors.Include(v => v.Visits).ToList();

编辑我也让它按如下方式工作:

List<Visitor> visitors = te.Visitors.Include("Visits").ToList();

关于c# - 如何将 System.Data.Entity.Infrastructure.DbQuery 类型转换为 System.Collections.Generic.List 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com