Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/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
如何将LINQ查询从查询语法转换为查询方法_Linq_Linq To Entities_Entity - Fatal编程技术网

如何将LINQ查询从查询语法转换为查询方法

如何将LINQ查询从查询语法转换为查询方法,linq,linq-to-entities,entity,Linq,Linq To Entities,Entity,Linq和EF4 我有这个Linq查询的查询语法,我想转换成查询方法 你能做到吗?我试了两个多小时,但没有成功:- 谢谢你的时间 CmsContent myContentObj = (from cnt in context.CmsContents from categoy in cnt.CmsCategories where categoy.CategoryId == myCurrentCategoryId &&

Linq和EF4

我有这个Linq查询的查询语法,我想转换成查询方法

你能做到吗?我试了两个多小时,但没有成功:-

谢谢你的时间

CmsContent myContentObj = (from cnt in context.CmsContents
                   from categoy in cnt.CmsCategories
                   where categoy.CategoryId == myCurrentCategoryId && cnt.ContentId == myCurrentContentId
                   select cnt).Single();

我的原始答案选择了错误的项目。这比Ani发布的内容要复杂一点。然而,我认为这是一个等价的查询,应该表现得更好:

CmsContent myContentObj =
    context.CmsContents
           .Where(cnt => cnt.ContentId == myCurrentId
                      && cnt.CmsCategories
                            .Any(categoy => categoy.CategoryId == myCurrentCategoryId))
           .Single();

我的原始答案选择了错误的项目。这比Ani发布的内容要复杂一点。然而,我认为这是一个等价的查询,应该表现得更好:

CmsContent myContentObj =
    context.CmsContents
           .Where(cnt => cnt.ContentId == myCurrentId
                      && cnt.CmsCategories
                            .Any(categoy => categoy.CategoryId == myCurrentCategoryId))
           .Single();

下面是C编译器在.NET Reflector的帮助下实际执行此操作的方式:

var myContentObj = context
                   .CmsContents  
                   .SelectMany(cnt => cnt.CmsCategories,
                               (cnt, categoy) => new { cnt, categoy })
                   .Where(a => a.categoy.CategoryId == myCurrentCategoryId
                            && a.cnt.ContentId == myCurrentContentId)
                   .Select(a => a.cnt)
                   .Single();
本质上,“嵌套的”from子句导致一个带有透明标识符的SelectMany调用—一个包含“父”cnt和“子”类别的匿名类型实例。Where过滤器应用于匿名类型实例,然后我们执行另一个Select投影以获取“父级”。当然,单个调用总是“在”查询表达式之外,因此很明显,它是如何适应的


有关更多信息,我建议阅读Jon Skeet的文章。

以下是C编译器的实际操作方式,请借助.NET Reflector的帮助进行验证:

var myContentObj = context
                   .CmsContents  
                   .SelectMany(cnt => cnt.CmsCategories,
                               (cnt, categoy) => new { cnt, categoy })
                   .Where(a => a.categoy.CategoryId == myCurrentCategoryId
                            && a.cnt.ContentId == myCurrentContentId)
                   .Select(a => a.cnt)
                   .Single();
本质上,“嵌套的”from子句导致一个带有透明标识符的SelectMany调用—一个包含“父”cnt和“子”类别的匿名类型实例。Where过滤器应用于匿名类型实例,然后我们执行另一个Select投影以获取“父级”。当然,单个调用总是“在”查询表达式之外,因此很明显,它是如何适应的


要了解更多信息,我建议阅读Jon Skeet的文章。

这里有一个非直接翻译,我相信它可以用更少的代码执行相同的任务:

var myContentObj = context.CmsContents.Single(
                        x => x.ContentId == myCurrentContentId && 
                        x.CmsCategories.Any(y => y.CategoryId == myCurrentCategoryId)
                    );

下面是一个非直接翻译,我相信它用更少的代码执行相同的任务:

var myContentObj = context.CmsContents.Single(
                        x => x.ContentId == myCurrentContentId && 
                        x.CmsCategories.Any(y => y.CategoryId == myCurrentCategoryId)
                    );

这是拼写语法-不是sintax…谢谢marc_s的评论这是拼写语法-不是sintax…谢谢marc_s的评论Hi jeff不工作错误1无法隐式地将类型“CmsCategory”转换为“CmsContent”@GibboK:啊,糟糕,忽略了所选内容。这实际上更像是Ani的功能。嗨,jeff不工作错误1无法将类型“CmsCategory”隐式转换为“CmsContent”@GibboK:Ah-oops,忽略了正在选择的内容。它实际上更像安尼的作品。嗨,它工作得很好,对我来说也是非常可读的!谢谢,它工作得很好,对我来说也是非常可读的!谢谢