繁体   English   中英

将查询语法转换为扩展方法语法

[英]Translate Query Syntax to Extension Methods Syntax

我正在尝试使用AdventureWorks2012数据库和EF在演示应用程序中保持一致,但是我需要一些帮助将此Linq语句转换为扩展方法。

return (from person in this.context.Persons
        from email in this.context.EmailAddresses
        where email.EmailAddress == emailAddress
        select person).FirstOrDefault();

这些对象是:

public class Person
{
    public int BusinessEntityId { get; set; }
    public string PersonType {get;set;}
    public bool NameStyle { get; set; }
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string Suffix { get; set; }
    public int EmailPromotion { get; set; }
    public PersonPassword Password { get; set; }
    public virtual ICollection<PersonEmailAddress> EmailAddresses { get; set; }
}

public class PersonEmailAddress
{
    public int BusinessEntityId { get; set; }
    public int EmailAddressId { get; set; }
    public string EmailAddress { get; set; }
    public virtual Person Person { get; set; }
}

public class PersonPassword
{
    public int BusinessEntityId { get; set; }
    public string PasswordHash { get; set; }
    public string PasswordSalt { get; set; }
    public virtual Person Person { get; set; }
}

其中,BusinessEntityId是PK。 任何帮助是极大的赞赏。 谢谢...

下面我将完全回答您的问题。 但是,我真的看不到为什么要将查询转换为扩展方法,所以我认为此答案不是您要查找的答案。 如果是这样,您可以深入了解术语并重新表述问题吗?


首先:LINQ查询语法只是扩展方法的不错的语法糖。 您的代码:

return (from person in this.context.Persons
        from email in this.context.EmailAddresses
        where email.EmailAddress == emailAddress
        select person).FirstOrDefault();

下面是LINQ查询语法转换为扩展方法。 两者是等效的,它们做的完全一样,并给出相同的结果:

return this.context.Persons
    .SelectMany(p => this.context.EmailAddresses,
        (p, e) => new { Person = p, Email = e})
    .Where(pe => pe.Email == pe.Person)
    .Select(pe => pe.Person)
    .FirstOrDefault();

只是阅读起来不那么好,而且很难理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM