我正在尝试使用条件包含(在此处解释,但它没有检索子信息。为什么?我想我已经遵循了所有步骤......我正在使用 WebApi 控制器和 Visual Studio 2012
我已经检查过了,我已经为每个房子分配了 doorTypes。这是多对多的关系。
我有这个:
DoorType 有这个属性
public virtual ICollection<House> Houses{ get; set; }
房子有这个属性
public virtual ICollection<Door> DoorTypes{ get; set; }
我正在查询这个方法
public IEnumerable<House> GetList(string latitude, string longitude, string idHousesTypeList)
{
IEnumerable<int> intIds = null;
if (!string.IsNullOrEmpty(idHousesTypeList))
{
var ids = idHousesTypeList.Split(',');
intIds = ids.Select(int.Parse);
}
var location = DbGeography.FromText(string.Format("POINT ({0} {1})", latitude, longitude), 4326);
var count = 0;
var radius = 0.0;
IEnumerable<House> houses = null;
while (count < 5 && radius < 500)
{
radius += 2.5;
var radiusLocal = radius;
var dbquery =
from house in Uow.Houses.GetAll()
where house.Location.Distance(location) / 1000 <= radiusLocal
orderby house.Location.Distance(location)
select new
{
house,
doorTypes= from doorType in house.DoorTypes
where intIds.Contains(doorType.Id)
select doorType
};
houses = dbquery
.AsEnumerable()
.Select(p => p.house);
count = houses.Count();
}
if (houses != null && houses.Any())
{
return houses;
}
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
}
我正在使用通用 EFRepository
public class EFRepository<T> : IRepository<T> where T : class
{
public EFRepository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("dbContext");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public virtual IQueryable<T> GetAll()
{
return DbSet;
}
public virtual IQueryable<T> GetAllIncluding(params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = DbContext.Set<T>();
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query;
}
public virtual T GetById(long id)
{
return DbSet.Find(id);
}
public virtual IQueryable<T> GetByPredicate(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = DbContext.Set<T>().Where(predicate);
return query;
}
public virtual IQueryable<T> GetByPredicateIncluding(System.Linq.Expressions.Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> query = DbContext.Set<T>().Where(predicate);
foreach (var includeProperty in includeProperties)
{
query = query.Include(includeProperty);
}
return query;
}
public virtual void Upsert(T entity, Func<T, bool> insertExpression)
{
if (insertExpression.Invoke(entity))
{
Add(entity);
}
else
{
Update(entity);
}
}
public virtual void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Detached)
{
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
public virtual void Update(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
DbSet.Attach(entity);
}
dbEntityEntry.State = EntityState.Modified;
}
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
public virtual void Delete(int id)
{
var entity = GetById(id);
if (entity == null) return; // not found; assume already deleted.
Delete(entity);
}
}
输出正确显示了所有房屋,但 doorTypes 数组为空。我错过了什么?