2013-02-22 78 views
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。 任何幫助,不勝感激。謝謝...

回答

3

下面我會準確回答你的問題。但是,我不明白爲什麼你想將查詢翻譯成擴展方法,所以我認爲這個答案不是你正在尋找的答案。如果是這樣,你可以潛入術語並重新解釋這個問題嗎?


第一: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(); 

它只是沒有很好的閱讀,這是很難理解的。

+0

*閱讀起來不太好,而且很難理解。*我相反。 – 2013-02-22 01:49:44

相關問題