添加到 LINQ 包含表达式
Add to LINQ Include Expression
我正在编写一个函数,允许用户从数据库中获取可查询的设备列表(底层提供程序是 EF)。但我想让他们指定自己的包含,但如果他们总是包含 Capabilites
的默认包含,我该怎么做?
public IQueryable<Device> GetAllDevices(params Expression<Func<Device, object>>[] includes)
{
// I really want to do something like includes.Add(d => d.Capabilities)
// (I know the above code wouldnt work, but illustrates what I want)
var newIncludes = includes /*(and somehow)*/ d => d.Capabilities,
return this.Repository.GetAll(newIncludes);
}
这是我的存储库 class 上使用的函数,它聚合了在其中发送的包含内容。我似乎无法弄清楚如何将单个默认包含添加到上述函数中
public IQueryable<T> GetAll(params Expression<Func<T, object>>[] includes)
{
IQueryable<T> query = this.dbset;
if (includes != null)
{
query = includes.Aggregate(query, (current, include) => current.Include(include));
}
return query;
}
您可以像这样链接 "Include().Include()...":
(IQueryable<T>).Include("Something").Include("SomethingElse");
您可以使用它并在 "includes" 数组上使用循环 inise 您的函数,例如:.
IQueryable<T> example = (some IQueryable<T>).Include(Capabilities);
foreach (include in includes)
example.Include(include);
不使用相同的Include()
两次没有具体限制。第二个被忽略了。
public IQueryable<Device> GetAllDevices(params Expression<Func<Device, object>>[] includes)
{
return this.Repository.GetAll(includes).Include(x => x.Capabilities);
}
这将始终 Include(x => x.Capabilities)
。
您的问题不清楚...也许如果用户不包含任何内容(includes
为空),您不想包含 Capabilities
:
public IQueryable<Device> GetAllDevices(params Expression<Func<Device, object>>[] includes)
{
IQueryable<Device> query = this.Repository.GetAll(includes);
if (includes != null && includes.Length != 0)
{
query = query.Include(x => x.Capabilities);
}
return query;
}
return 数据库集
.Where(你的情况)
.Include(string.Join("., include))
.FirstOrDefault();
我正在编写一个函数,允许用户从数据库中获取可查询的设备列表(底层提供程序是 EF)。但我想让他们指定自己的包含,但如果他们总是包含 Capabilites
的默认包含,我该怎么做?
public IQueryable<Device> GetAllDevices(params Expression<Func<Device, object>>[] includes)
{
// I really want to do something like includes.Add(d => d.Capabilities)
// (I know the above code wouldnt work, but illustrates what I want)
var newIncludes = includes /*(and somehow)*/ d => d.Capabilities,
return this.Repository.GetAll(newIncludes);
}
这是我的存储库 class 上使用的函数,它聚合了在其中发送的包含内容。我似乎无法弄清楚如何将单个默认包含添加到上述函数中
public IQueryable<T> GetAll(params Expression<Func<T, object>>[] includes)
{
IQueryable<T> query = this.dbset;
if (includes != null)
{
query = includes.Aggregate(query, (current, include) => current.Include(include));
}
return query;
}
您可以像这样链接 "Include().Include()...":
(IQueryable<T>).Include("Something").Include("SomethingElse");
您可以使用它并在 "includes" 数组上使用循环 inise 您的函数,例如:.
IQueryable<T> example = (some IQueryable<T>).Include(Capabilities);
foreach (include in includes)
example.Include(include);
不使用相同的Include()
两次没有具体限制。第二个被忽略了。
public IQueryable<Device> GetAllDevices(params Expression<Func<Device, object>>[] includes)
{
return this.Repository.GetAll(includes).Include(x => x.Capabilities);
}
这将始终 Include(x => x.Capabilities)
。
您的问题不清楚...也许如果用户不包含任何内容(includes
为空),您不想包含 Capabilities
:
public IQueryable<Device> GetAllDevices(params Expression<Func<Device, object>>[] includes)
{
IQueryable<Device> query = this.Repository.GetAll(includes);
if (includes != null && includes.Length != 0)
{
query = query.Include(x => x.Capabilities);
}
return query;
}
return 数据库集 .Where(你的情况) .Include(string.Join("., include)) .FirstOrDefault();