我使用EF 4和C#。
我有一个类似的查询:
var contentsAuthor = from c in context.CmsContents
join a in context.CmsAuthors on c.AuthorId equals a.AuthorId
where a.UserId == userGuid
select new
{
c.Title,
c.ContentId
};
我想用Lambda Expression在Linq中重写它。 我的问题:
注意:可能这个问题的标题不合适,让我知道我会改进它
谢谢你们的帮助!
答案 0 :(得分:3)
lambda表达式应如下所示:
var contentsAuthor = context.CmsContents
.Join(context.CmsAuthors,
content => content.AuthorId,
author => author.AuthorId,
(content, author) => new { content, author })
.Where(x => x.author.UserId == userGuid)
.Select(x => new { x.content.Title, x.content.ContentId });
你和这个版本都是LINQ查询。这个直接使用lambdas而你的版本使用C#中提供的语法糖。他们是一样的。 LINQ-to-Entities与此无关。
无论如何,如果你使用LINQ到实体,你的CmsContent
应该有Author
属性,你的查询会减少到:
var contentsAuthor = context.CmsContents
.Where(c => c.Author.UserId == userGuid)
.Select(c => new { c.Title, c.ContentId });
在将表达式树转换为SQL查询时,LINQ-to-Entities提供程序将为您提供连接。
答案 1 :(得分:0)
LAMBDA:
var contentsAuthor = context.CmsContents
.Join(context.CmsAuthors, c => c.AuthorId, a => a.AuthorId, (c, a) => new { Contents = c, Author = a })
.Where(w => w.Author.UserId == userGuid)
.Select(s => new { s.Contents.Title, s.Contents.ContentId });
你这样做的方式很好。我称之为查询语法,但我不确定它是否有正式名称。
对于这类东西,请查看LINQPad。在“表达式”模式下,您可以像您一样键入查询,然后单击Lambda符号,它将显示查询的lambda版本。
答案 2 :(得分:0)
var result = context.CmsContents
.Join(context.CmsAuthors.Where(x => x.auth.UserId == userGuid),
content => content.AuthorId,
author => author.AuthorId,
(cont, auth) => new { cont, auth })
.Select(x => new { x.cont.Title, x.cont.ContentId });