使用lambda表达式查询实体连接

时间:2013-12-14 05:34:03

标签: c# sql sql-server entity-framework lambda

我在我的网络应用程序中使用VS12和实体框架。 使用baseRepository从数据库(sql server 2008 R2)获取数据,其中查询上下文是GetAll(),其中,findBy,add,update,saveChanges,dispose,getById()。 使用此存储库进行事务。 在一种情况下,使用join来获取从三个不同实体过滤的数据。

任何人都可以举例说明......

1 个答案:

答案 0 :(得分:1)

我用这种方式解决了这个问题,

  using (var db = new KitRepository<ServiceLevel>())
            {               
                using (var kit = new KitRepository<Kit>())
                {
                    var kitServiceLevel = kit.Search(o => o.PatientId == patientId).Select(i => i.kitServiceLevelId).ToList();
                    var temp = db.Where(o => o.HospitalMasterId == HospitalId && kitServiceLevel.Contains(o.ServiceLevelId) && o.IsEnabled == true).Select(i => i.TabletRequired).ToList();
                    var entity = db.Search(l => temp.Contains(l.TabletRequired) && lstServiceType.Contains(l.ServiceCodeTypeEnumId)).ToList();

                    var model = new List<ServiceLevelModel>();
                    Mapper.Map(entity, model);
                    return model;
                }
            }

如果有人优化了查询

 var kitServiceLevel = kit.Search(o => o.PatientId == patientId).Select(i => i.kitServiceLevelId).ToList();
                        var temp = db.Where(o => o.HospitalMasterId == HospitalId && kitServiceLevel.Contains(o.ServiceLevelId) && o.IsEnabled == true).Select(i => i.TabletRequired).ToList();
                        var entity = db.Search(l => temp.Contains(l.TabletRequired) && lstServiceType.Contains(l.ServiceCodeTypeEnumId)).ToList();

然后告诉我。