2012-03-30 2 views
1

나는 ADO.NET 엔티티 프레임 워크를 배우고있다. 이것은 나의 첫 번째 예입니다. DataGrid는 표시하려는 실제 열이 아니라 고객의 길이를 차지하는 것처럼 보입니다. 다음은 코드입니다.행의 길이를 표시하는 Datagrid보기

public partial class NewCustomerForm : Form 
{ 
    AFApp_H1Entities entities = new AFApp_H1Entities(); 
    public NewCustomerForm() 
    { 
     InitializeComponent(); 
    } 

    private void NewCustomerForm_Load(object sender, EventArgs e) 
    { 
     var query = from c in entities.Customers 
         where c.ZIP == "77080" 
         select c.CustomerName; 

     this.Controls.Add(dataGridView1); 
     dataGridView1.DataSource = query; 
    } 
} 

내가 콘솔 응용 프로그램에서 동일한 쿼리를 실행할 때 나는 점점 오전 일부 데이터를 얻을 것이다 가정했지만 그리드 년은 나에게 고객의 이름의 길이를 제공합니다. ?

답변

0

이 코드는 쿼리에서 반환 한 모든 행에 대해이 코드를 사용하여 결과를 필터링해야하는 경우 query.length()라는 항목을 제공합니다.

편집

확인이, 내가, 당신은 ADO 말을하지만 변수 명명 않는 당신이 (다시 게시하시기 바랍니다하지 않은 경우) 엔티티 프레임 워크를 사용하려고하는 추측하고 그래서 작은 테스트 케이스를 쓴 날 귀찮게 그래서 이것은 보통의 오래된 ADO가 아닐 수 있음을 나타냅니다.

그래서 내 데이터베이스 테이블 만들기 스크립트입니다. 내 appication에서

이제
USE [Customers] 
GO 

/****** Object: Table [dbo].[Customer] Script Date: 04/02/2012 11:16:02 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[Customer](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](50) NOT NULL, 
    [Zip] [nvarchar](50) NOT NULL, 
CONSTRAINT [PK_Customer] PRIMARY KEY CLUSTERED 
(
    [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

가지고있다이

public partial class Form1 : Form 
{ 
    private readonly CustomersEntities _entities = 
     new CustomersEntities(ConfigurationManager.ConnectionStrings["CustomersEntities"].ConnectionString); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var query = 
      _entities.Customers.Where(c => c.Zip == "12345").Select(
       c => new CustomerDataBinding {Name = c.Name, Zip = c.Zip}); 

     Controls.Add(dataGridView1); 
     dataGridView1.DataSource = query; 
    } 
} 

public class CustomerDataBinding 
{ 
    public string Zip { get; set; } 
    public string Name { get; set; } 
} 

나는 세 개의 동일한 우편 번호와 해당 데이터베이스에 두 개의 레코드 (그것 아닌 실제 zip 형식을 중요하지 않습니다) 및없이 하나가 (SQL을 사용하여 자신의 데이터 삽입).

이 코드를 실행하면 2 명의 고객이 예상대로 그리드에 반환되고 3 명이 반환되지 않습니다.

이 점을 이해하는 가장 좋은 방법은 아니지만 기본 예제에서는 작동합니다.

그런데이 앱은 안녕 왜 나를 query.length주고있다

+0

실행에 this 보인다? c.CustomerName을 선택하면 77080의 zipcode에있는 모든 customerNames를 제공하지 않아야합니까 ?? – IrtizaRizvi

+0

은 쿼리가 필드 고객 이름 값과 같기 때문에 선택한 각 고객의 이름이 첫 번째 이름 (해당 값이 null 인 경우에도)이므로 항목이므로 여전히 query.length는 ZIP 77080의 고객과 같습니다. 그것이 바로 이유입니다. SQL 쿼리를 시도하고 동일한 결과를 확인할 수 있습니다. 77080에있는 모든 고객의 길이가 아니라 모든 고객의 길이를 알려주는지를 말하고 있습니까? 쿼리 수를 계산하면 어떻게됩니까? –

+0

변경된 예를 붙여 넣으세요. 발생하는 것을 확인하세요. –

관련 문제