3

私は2つのテーブルを持っています:CustomerそしてCustomer_Address

私は機能を持っています:

public IEnumerable<Customer_Address> ReadAddressForCustomer(int CustomerID)
{
    ProjectServiceForCustomerDataContext DB = new ProjectServiceForCustomerDataContext();
    var CA = (from C in DB.Customer_Addresses
              join cust in DB.Customers
              on C.CustomerID equals cust.ID
              where C.CustomerID == CustomerID
              select new
              {
                  CustomerName=cust.Name,
                  CustomerAddress=C.Address,
                  CustomerTel=C.Telephone
              }).ToList();
    return CA;
}

ただし、フィールド ( )IEnumerable(Customer_Address)があるため、CA は ではありません。Customercust.Name

この問題を解決するにはどうすればよいですか?

4

4 に答える 4

5

あなたは匿名型を返します。これがそうではない理由ですIEnumerable<Customer_Address>

これに似たものを使ってみてください

var CA = (from C in DB.Customer_Addresses
                  join cust in DB.Customers
                  on C.CustomerID equals cust.ID
                  where C.CustomerID == CustomerID
                  select new Customer_Address( // <--- HERE
                      cust.Name,
                      C.Address,
                      C.Telephone
                  ).ToList();
于 2012-07-23T19:30:10.417 に答える
1

必要なデータをカプセル化する新しい具象型を作成します。

class CustomerInfo   // new class
{
    private string CustomerName;
    private string CustomerAddress;
    private string CustomerTel;
}

public IEnumerable<CustomerInfo> ReadAddressForCustomer(int CustomerID)  //return new class
{
    ProjectServiceForCustomerDataContext DB = new ProjectServiceForCustomerDataContext();
    var CA =  from C in DB.Customer_Addresses
              join cust in DB.Customers
              on C.CustomerID equals cust.ID
              where C.CustomerID == CustomerID
              select new CustomerInfo    // instantiate new concrete type
              {
                  CustomerName=cust.Name,
                  CustomerAddress=C.Address,
                  CustomerTel=C.Telephone
              }   // don't call ToList anymore
    return CA;
}
于 2012-07-23T19:29:06.430 に答える
1

@Daniel DiPaoloが提案する解決策は良いもので、必要なプロパティのみを保持するライトクラスを宣言しますが、以下のように、フィールドではなくプロパティを使用する方が良いと思います:

class CustomerInfo   // new class
{
    public string CustomerName{get;set;}
    public string CustomerAddress{get;set;}
    public string CustomerTel{get;set;}
}
于 2012-07-27T07:58:44.023 に答える
0

キャストすることもできます

Enumerable<CustomerInfo> CA =
                fruits.Cast<CustomerInfo>().(from C in DB.Customer_Addresses
                  join cust in DB.Customers
                  on C.CustomerID equals cust.ID
                  where C.CustomerID == CustomerID
                  select new
                  {
                      CustomerName=cust.Name,
                      CustomerAddress=C.Address,
                      CustomerTel=C.Telephone
                  }
                  );
return CA;
于 2012-07-23T19:30:57.567 に答える