我在Contact类中有一个称为LoadContact()的公共方法。我想使用Linq加载联系人数据,并将值分配给“此”实例。

到目前为止,我有.....

var contact = (from cont in db.Contacts
    from note in db.Contacts_Notes.Where(n => n.ContactID == cont.ContactID).DefaultIfEmpty()
    where cont.AccountID == this.AccountID && cont.ContactID == this.ContactID
    select new Contact
    {
        AccountID = cont.AccountID,
        CompanyName = cont.CompanyName,
        ContactID = cont.ContactID,
        Firstname = cont.Firstname,
        JobTitle = cont.JobTitle,
        Lastname = cont.Lastname,
        Notes = note.Note
    }).SingleOrDefault();

if(contact != null)
{
    this.AccountID = contact.AccountID;
    this.CompanyName = contact.CompanyName etc etc etc
}


。,..但是这似乎很漫长。如何将结果直接分配给当前实例?

最佳答案

您为什么不将其设为返回新联系人的静态方法,是有原因的?您想要做的方式看起来像是糟糕的设计(取决于您为什么这么做)。

我建议您将其设置为静态,以便可以像这样使用它:

var contact = Contact.Load(...);


代替

var contact = new Contact();
contact.LoadContact(...);


这样,您就可以只返回在查询中找到的联系人,例如:

public static Load(int contactID, int accountID) //If they are integers
{
    return (from cont in db.Contacts
        from note in db.Contacts_Notes.Where(n => n.ContactID == cont.ContactID).DefaultIfEmpty()
        where cont.AccountID == accountID && cont.ContactID == contactID
        select new Contact
        {
            //... stuff
        }).SingleOrDefault();
}

关于c# - LinQ to SQL查询数据库并分配给当前实例(此),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3494323/

10-12 14:12