C# 如何解决这个问题;已打开与此命令关联的DataReader,必须先关闭该命令;在我的Linq声明中?
可能重复:C# 如何解决这个问题;已打开与此命令关联的DataReader,必须先关闭该命令;在我的Linq声明中?,c#,linq,entity-framework-4,C#,Linq,Entity Framework 4,可能重复: 我有以下课程: public class VwSelectBrochures { public List<SelectBrochure> SelectBrochures { get; set; } } public class SelectBrochure { public int BrochureId { get; set; } public string UrlImage { get; set; } public st
我有以下课程:
public class VwSelectBrochures
{
public List<SelectBrochure> SelectBrochures { get; set; }
}
public class SelectBrochure
{
public int BrochureId { get; set; }
public string UrlImage { get; set; }
public string Description { get; set; }
public string Cat1Description { get; set; }
public string Cat2Description { get; set; }
public string Cat3Description { get; set; }
public List<LangSelection> Languages { get; set; }
}
public class LangSelection
{
public int Id { get; set; }
public string Description { get; set; }
public bool Vink { get; set; }
}
公共课程手册
{
公共列表选择手册{get;set;}
}
公开课小册子
{
公共int手册ID{get;set;}
公共字符串UrlImage{get;set;}
公共字符串说明{get;set;}
公共字符串CAT1说明{get;set;}
公共字符串Cat2Description{get;set;}
公共字符串CAT3说明{get;set;}
公共列表语言{get;set;}
}
公共班级选择
{
公共int Id{get;set;}
公共字符串说明{get;set;}
公共bool-Vink{get;set;}
}
这一行代码:
var dbmodel2 =
from x in
brochures.AsEnumerable().Select(
x => new SelectBrochure {BrochureId = x.Id, Description = x.Description, UrlImage = x.UrlImage,
Languages = new List<LangSelection>(from y in x.BrochureLanguages select new LangSelection(){Description = y.Language.Description, Id = y.Language.Id})})
select x;
var dbmodel2=
从x开始
宣传册。AsEnumerable()。选择(
x=>new select宣传册{BrochureId=x.Id,Description=x.Description,UrlImage=x.UrlImage,
Languages=新列表(从x.BrochureLanguages中的y选择新LangSelection(){Description=y.Language.Description,Id=y.Language.Id})
选择x;
手册和手册语言是我的db模型
我知道我得到了这个错误,因为我不能做“x.BrochureLanguages中的from y”,但我不知道如何修复这个错误
我真正想要的是将所有小册子放入VwSelectBrochures类。建议架构修复的信息太少,但解决方法是在连接字符串中启用。建议架构修复的信息太少,但解决方法是在连接字符串中启用。最简单的方法是将整个
手册
放入内存(使用ToList()
):
var dbmodel2=
从x开始
小册子。ToList()。选择(
x=>new select宣传册{BrochureId=x.Id,Description=x.Description,UrlImage=x.UrlImage,
Languages=新列表(从x.BrochureLanguages中的y选择新LangSelection(){Description=y.Language.Description,Id=y.Language.Id})
选择x;
这样,当在…中从y运行
时,不会打开其他数据读取器。我认为还有另一种方法可以使用连接最简单的方法是首先将整个手册放入内存(使用ToList()
):
var dbmodel2=
从x开始
小册子。ToList()。选择(
x=>new select宣传册{BrochureId=x.Id,Description=x.Description,UrlImage=x.UrlImage,
Languages=新列表(从x.BrochureLanguages中的y选择新LangSelection(){Description=y.Language.Description,Id=y.Language.Id})
选择x;
这样,当在…
中从y运行时,不会打开其他数据读取器。我认为还有另一种选择,使用连接我对查询表达式有点不确定,个人更喜欢使用底层扩展方法来获得结果。很抱歉,这个答案不是查询表达式格式,但您能试试吗
var dbmodel2 = brochures.AsEnumerable().Select(x => new SelectBrochure {
BrochureId = x.Id,
Description = x.Description,
UrlImage = x.UrlImage,
Languages = x.BrochureLanguages.Select(y => new LangSelection() {
Description = y.Language.Description,
Id = y.Language.Id
})
}).ToList(); // this executes the whole query
同样,由于对查询表达式格式没有100%的把握,我觉得外部的“from x in…select x”是多余的,我想知道这是否是导致错误的原因。我对查询表达式有点不确定,我个人更喜欢使用底层扩展方法来获得结果。很抱歉,这个答案不是查询表达式格式,但您能试试吗
var dbmodel2 = brochures.AsEnumerable().Select(x => new SelectBrochure {
BrochureId = x.Id,
Description = x.Description,
UrlImage = x.UrlImage,
Languages = x.BrochureLanguages.Select(y => new LangSelection() {
Description = y.Language.Description,
Id = y.Language.Id
})
}).ToList(); // this executes the whole query
同样,由于对查询表达式格式没有100%的把握,我觉得外部的“from x in…select x”是多余的,我想知道这是否是导致错误的原因。是否有理由不能在该语句之前声明和构建列表,然后在该列表上为每个新的select宣传册发出.ToArray().ToList()**因此,您可以将其声明为上面的数组,并对每个新对象在该数组上发出.ToList()。是否有理由不能在该语句之前声明和构建列表,然后对每个新对象在该列表上发出.ToArray().ToList()**因此,您可以将其声明为上面的一个数组,并在该数组上为每个新对象发出一个.ToList()。先生,您真是太棒了!我应该已经找到了。@jurgen_如果这解决了问题,请标记为已接受的答案。有关更多信息,请参阅。先生,您真是太棒了!我应该已经找到了。@jurgen_如果这解决了问题,请标记为已接受的答案。有关详细信息,请参阅。简单改编工作正常:在“手册”之后添加ToList。在y.Language.ID}之后添加ToList。ToList()简单改编工作正常:在“手册”之后添加ToList。在y.Language.ID}之后添加ToList。ToList()