0

我正在显示我的数据库中的一条记录。该记录从其他表中提取数据并使用主表中的 Int 来表示值,因此 Item 表的 Division 等于 1 并且 Division 表 1 = ALL 。现在我正在显示记录,我试图将 1 变为全部。所有 ID 字段都显示 int。这就是我的代码告诉它要做的事情。但我正在尝试显示名称,当我这样做时,我会得到很多红色。它找不到名称。CatagoryID应该是CategoryName

希望这是有道理的。

if (!IsPostBack)
{
     string v = Request.QueryString["ContactID"];
     int itemid;
     int.TryParse(v, out itemid);
     var customerInfo =  GetCustomerInfo(itemid);
     CONTACTID.Text = customerInfo[0].ContactID.ToString();
     ContactTitle.Text = customerInfo[0].ContactTitlesID.ToString();
     ContactNameB.Text = customerInfo[0].ContactName;
     DropDownAddCategory.Text = customerInfo[0].CategoryID.ToString();
     DDLAddDivision.Text = customerInfo[0].DivisionID.ToString();
     ContactPhoneBox.Text = customerInfo[0].ContactOPhone;
     ContactCellBox.Text = customerInfo[0].ContactCell;
     ContactEmailBox.Text = customerInfo[0].ContactEmail;
     CextB.Text = customerInfo[0].Ext;
}

private List<Solutions.Models.Contact> GetCustomerInfo(int itemid)
{
     using (ItemContext context = new ItemContext())
     {
         return (from c in context.Contacts 
                 where c.ContactID == itemid
                 select c).ToList();
     }
}

这是模型

public class Contact
{
        [ScaffoldColumn(false)]
        public int ContactID { get; set; }    
        public System.DateTime ContactCreated { get; set; }    
        public string ContactName { get; set; }    
        public int? ContactTitlesID { get; set; }    
        public string ContactOPhone { get; set; }    
        public bool cApproved { get; set; }    
        public string User { get; set; }
        public string ContactCell { get; set; }    
        public string ContactEmail { get; set; }    
        public int? DivisionID { get; set; }    
        public int? CategoryID { get; set; }    
        [StringLength(5)]
        public string CExt { get; set; }           
        public virtual Division Division { get; set; }
        public virtual Category Category { get; set; }
        public virtual ContactTitle ContactTitle { get; set; }    
        public string Ext { get; set; }
}
4

2 回答 2

1

使用实体框架,您可以在查询结果中包含相关实体:

 return (from c in context.Contacts.Include("Catagory") 
         where c.ContactID == itemid
         select c).ToList();

这将返回具有类别对象的联系人:customerInfo.Catagory.CategoryName

顺便说一句,不是返回联系人列表并按索引选择第一个(因此可能有索引超出范围异常),而是修改您的方法以返回第一个联系人(或默认值,如果未找到):

private Solutions.Models.Contact GetCustomerInfo(int itemid)
{
     return (from c in context.Contacts.Include("Catagory") 
             where c.ContactID == itemid
             select c).FirstOrDefault();
}

并以这种方式使用它:

var customerInfo =  GetCustomerInfo(itemid);
if (customerInfo != null)
{        
    CONTACTID.Text = customerInfo.ContactID.ToString();
    // etc
}
于 2012-12-10T17:58:12.377 回答
0

您使用的是 LINQ to SQL 还是实体框架?再次检查您的模型并确保两个表之间的关系设置正确。模型中可能缺少该关系,并导致此问题。

于 2012-12-10T16:32:12.167 回答