如果想要在某些实体框架选择上使用Include()方法(为了避免“Object as been disposed”异常)。但是Include只接受一个字符串作为参数,这意味着只有一个include。要执行多个include,必须链接includes .Include("something").Include("something").Include("something")
但我希望我的包含来自字符串数组。
所以我想要写的是.Include(array[0]).Include(array[1]).Include(array[2])...Include(array[n])的等价物
(其中'n‘= array.Length - 1)
当然,我事先不知道字符串数组中会有什么。
但到目前为止,我找不到正确的语法。谢谢你的帮助
编辑:鉴于我到目前为止已经得到的建议,我想说的是,请准确地使用类型并避免空值问题,并对其进行测试。到目前为止,似乎还没有有效的解决方案,我迷失在这样或那样的类型中我能做什么,不能做什么。
发布于 2013-12-02 21:56:23
您可以使用params string[],这将使您的代码更加清晰:
public static IQueryable<T> Include<T>(this IDbSet<T> dbSet, params string[] includes) where T : class
{
foreach (var include in includes)
dbSet.Include(include);
return dbSet;
}然后,您可以通过两种方式使用它:
.Include("NavProp1", "NavProp2", "NavProp3");和:
.Include(new[] { "NavProp1", "NavProp2", "NavProp3" });发布于 2013-12-02 21:34:43
public IEnumerable<T> GetDataWithIncludes<T>(string[] includes) where T: class, new()
{
DbQuery<T> dbQuery = null;
DbSet<T> dbSet = this.Set<T>();
foreach (string include in includes)
{
dbQuery = dbSet.Include(include);
}
return dbQuery.AsEnumerable();
}发布于 2013-12-02 21:31:46
您可以始终将它们链接在一个循环中:
var query = DataSource.Select(...).Where(...); // as IQueryable<T>
foreach(string include in includes)
{
query = query.Include(include);
}
return query.ToList(); // materializehttps://stackoverflow.com/questions/20329407
复制相似问题