代码之家  ›  专栏  ›  技术社区  ›  CaptainMorgan

使用实体框架将表连接到列表

  •  0
  • CaptainMorgan  · 技术社区  · 8 年前

    我有下面的实体框架函数,它将一个表连接到一个列表。中的每个项目 serviceSuburbList ServiceId SuburbId .

    public List<SearchResults> GetSearchResultsList(List<ServiceSuburbPair> serviceSuburbList)
    {
        var srtList = new List<SearchResults>();
        srtList = DataContext.Set<SearchResults>()
                             .AsEnumerable()
                             .Where(x => serviceSuburbList.Any(m => m.ServiceId == x.ServiceId && 
                                                                    m.SuburbId == x.SuburbId))
                             .ToList();
    
        return srtList;
    }
    

    AsEnumerable 会毁了我的表演。我不确定还有别的办法。基本上,我有我的 SearchResults 表和我想找到匹配的记录 服务郊区列表 .

    1 回复  |  直到 8 年前
        1
  •  0
  •   Slava Utesinov    8 年前

    如果 serviceSuburbList 的长度不是很大,你可以做几个 Union

    var table = DataContext.Set<SearchResults>();
    IQuerable<SearchResults> query = null;
    foreach(var y in serviceSuburbList)
    {
        var temp = table.Where(x => x.ServiceId == y.ServiceId && x.SuburbId == y.SuburbId);
        query = query == null ? temp : query.Union(temp);
    }
    
    var srtList = query.ToList();
    

    另一个解决方案-使用 Z.EntityFramework.Plus.EF6

    var srtList = serviceSuburbList.Select(y => 
                     ctx.Customer.DeferredFirstOrDefault(
                        x => x.ServiceId == y.ServiceId && x.SuburbId == y.SuburbId
                     ).FutureValue()
                  ).ToList().Select(x => x.Value).Where(x => x != null).ToList();
    //all queries together as a batch will be sent to database 
    //when first time .Value property will be requested