Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解决这个问题;已打开与此命令关联的DataReader,必须先关闭该命令;在我的Linq声明中?_C#_Linq_Entity Framework 4 - Fatal编程技术网

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()