0

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です。どんな助けでも大歓迎です。ありがとう...

4

1 に答える 1

3

以下、私はあなたの質問に正確に答えます。ただし、クエリを拡張メソッドに変換する理由がよくわからないため、この回答は探している回答ではないと思います。もしそうなら、あなたは用語に飛び込んで質問を言い換えることができますか?


最初に:LINQクエリ構文は、拡張メソッドの構文糖衣構文として最適です。あなたのコード:

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

以下は、拡張メソッドに変換されたLINQクエリ構文です。2つは同等であり、まったく同じことを行い、同じ結果をもたらします。

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

読むのはそれほど良くなく、理解するのは難しいです。

于 2013-02-22T00:48:33.680 に答える