我正在迈出第一步,这需要对我的应用程序进行内部处理,并将其全部重新设计为3层和面向对象。 嗟。我有一个提交对象,它应该包含一个客户对象(以及一个代理和覆盖对象);我想在每个包含的对象的字段中存储来自db的一些datareader结果,但是当我尝试使用新的提交对象调用Customer对象时,我什么也得不到。 VS无法识别Submission包含Customer对象。我显然错过了一些关键点,所以考虑到这一点,想法?代码如下。
//This is the Submission class here
public class Submission
{
public int SubmissionId {get;set;}
public int Status { get; set; }
public string StatusComment { get; set; }
public class Customer
{
//public Customer() { }
public int CustId { get; set; }
public string CustName { get; set; }
public string CustAddress { get; set; }
public string CustState { get; set; }
public string CustCity { get; set; }
public int CustZip { get; set; }
public int SicNaic { get; set; }
}
public object Customer();
}
//These lines throw an error:
无法通过表达式引用类型。 VS无法识别TempSubmission.Customer提交的Customer对象。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
/// This query should selects the relevant data for a gridview on the presentation layer and stores in a list.
/// Don't quite know how to bind it to the gridview yet, but that's a different question.
public class SubmissionDatabaseService
{
public List<Submission> GetAllSubmissions()
{
string Searchstring = "SELECT Submission.SubmissionId, Customer.CustName, Customer.CustCity, Customer.CustState, Broker.BroName, Broker.BroState, Broker.EntityType, Submission.Coverage, Status.Status FROM Submission INNER JOIN Broker ON Broker.BroId = Submission.BroId INNER JOIN Customer ON Customer.CustId = Submission.CustId INNER JOIN Status ON Status.StatusId = Submission.StatusId";
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
SqlDataReader dr = null;
try
{
conn.Open();
SqlCommand Searchcmd = new SqlCommand(Searchstring, conn);
dr = Searchcmd.ExecuteReader();
List <Submission> lstSubmission;
Submission tempSubmission;
while (dr.Read())
{
tempSubmission = new Submission();
tempSubmission.SubmissionId = dr.GetInt32(0);
tempSubmission.Customer.CustName = dr.GetString(1);
tempSubmission.Customer.CustCity = dr.GetString(2);
tempSubmission.Customer.CustState = dr.GetString(3);
tempSubmission.Broker.BroName = dr.GetString(4);
tempSubmission.Broker.BroState = dr.GetString(5);
tempSubmission.Broker.EntityType = dr.GetString(6);
tempSubmission.SubmissionCoverage.Coverage = dr.GetInt32(7);
tempSubmission.Status = dr.GetInt32(8);
//Add rest of the fields
lstSubmission.Add(tempSubmission);
}
}
return lstSubmission;
}
}
答案 0 :(得分:6)
噢..从哪里开始?将Customer类放在自己的文件Customer.cs中,将Submission类放在自己的文件Submission.cs
中然后你可以这样做一个简单的提交类:
public class Submission
{
// consider implementing the below as properties to more finely control access
public int SubmissionId;
public int Status;
public string StatusComment;
public Customer SubmissionCustomer; // <-- this is null until you set it to a Customer object, either in the constructor or externally.
public Submission() {
// constructor
}
}
然后阅读属性和构造函数,并按照您认为合适的方式进行处理。参见:
http://msdn.microsoft.com/en-us/library/x9fsa0sw(v=vs.80).aspx
属性具有私有/公共模式。至于构造函数:
请参阅:
http://msdn.microsoft.com/en-us/library/ace5hbzh.aspx
每当您创建类的实例(对象)时,都会调用构造函数。
答案 1 :(得分:1)
我认为你想要的是Customer类在Submission类之外,并且Submission类包含Customer的实例。
public class Submission
{
public Submission()
{
this.Customer = new Customer();
}
public int SubmissionId { get; set; }
public int Status { get; set; }
public string StatusComment { get; set; }
public Customer Customer { get; set; }
}
public class Customer
{
//public Customer() { }
public int CustId { get; set; }
public string CustName { get; set; }
public string CustAddress { get; set; }
public string CustState { get; set; }
public string CustCity { get; set; }
public int CustZip { get; set; }
public int SicNaic { get; set; }
}
答案 2 :(得分:0)
仅在Submission中定义Customer对象不会使Submission包含Customer实例。对于您想要做的事情,只需将Customer置于Submission之外,并在Submission内定义Customer属性。
答案 3 :(得分:0)
您尝试通过Customer
引用实际的tempSubmission
类型。您必须改为引用Customer
的实例,该实例将通过属性或类似内容公开。
答案 4 :(得分:0)
问题是您的客户类型不是特定的,它被定义为对象而不是客户。
要实现您想要做的事情,您必须在Customer
课程中添加一个新成员,在这种情况下为Submission
类型的属性,您对public object Customer();
所做的基本上是meams ,定义一个名为Customer
的类型为对象的方法。
您要做的是定义一个名为Customer
的属性,称为“任意”,例如RelatedCustomer
Public Customer RelatedCustomer{get;set;}