2012-04-13 72 views
0

我在這我試圖使用LINQ查詢訪問表的數據命名公司 和一個錶轉換成公司CALSS像在數據轉換到ToList()

List<Company> companyData = (from c in dataContext.Companies 
     select new 
     { 
      CompanyName =c.CompanyName, 
      Address1 =c.Address1, 
      Addredd2 =c.Address2, 
      city=c.City.CityName, 
      state =c.State.StateName, 
      country =c.Country.CountryName, 
      Telephone1 =c.Telephone1, 
      Telephone2 =c.Telephone2, 
      Mobile1 =c.Mobile1, 
      Mobile2=c.Mobile2, 
      Email1 =c.Email1, 
      Email2 = c.Mobile2, 
      Fax1=c.Fax1, 
      Fax2=c.Fax2, 
      TinNo=c.TinNo, 
      IsGroupCompany=c.IsGroupCompany 
     }).ToList<Company>(); 

,但它給錯誤,如ToList()有一些無效的參數 如何可以給COLUMNNAME以列表形式提前獲取數據

Thaks

+0

什麼桌子?你的意思是「DataTable」類嗎? – 2012-04-13 04:49:44

+0

正如其他人指出的那樣,真正的關鍵是確保您明確地編寫「選擇新公司{}」以使其發揮作用。 – 2012-04-13 05:02:31

+0

是的,但又一個目標是在新的選擇後給出不同的列名,並且仍然使其成爲公司類型。我認爲那不可能。 – Marshal 2012-04-13 05:04:49

回答

1
List<Company> companyData = (from c in dataContext.Companies 
      select new Company() { ... }).ToList(); 
3

我想你」重新尋找這樣的:

List<Company> companyData = (from c in dataContext.Companies select new Company { 
    CompanyName = c.CompanyName, 
    Address1 = c.Address1, 
    Address2 = c.Address2, 
    City = c.City, 
    State = c.State, 
    Country = c.Country, 
    Telephone1 = c.Telephone1, 
    Telephone2 = c.Telephone2, 
    Mobile1 = c.Mobile1, 
    Mobile2 = c.Mobile2, 
    Email1 = c.Email1, 
    Email2 = c.Email2, 
    Fax1 = c.Fax1, 
    Fax2 = c.Fax2, 
    TinNo = c.TinNo, 
    IsGroupCompany = c.IsGroupCompany } 
).ToList(); 

換句話說,你的代碼實例化一個anonymous type,但你要創建公司對象的列表。因此,請改爲實例化一個Company對象。

但是,您可能無需創建一組新公司對象,並從其他公司對象集中複製其屬性。如果是這樣,你可以這樣做:

List<Company> companyData = dataContext.Companies.ToList(); 

如果你需要命名屬性不同,那麼你是正確的使用匿名類型。在這種情況下,你必須使用var關鍵字,因爲對象是Company類的不再實例:

var companyData = (from c in dataContext.Companies 
    select new 
    { 
     CompanyName =c.CompanyName, 
     Address1 =c.Address1, 
     Addredd2 =c.Address2, 
     city=c.City.CityName, 
     state =c.State.StateName, 
     country =c.Country.CountryName, 
     Telephone1 =c.Telephone1, 
     Telephone2 =c.Telephone2, 
     Mobile1 =c.Mobile1, 
     Mobile2=c.Mobile2, 
     Email1 =c.Email1, 
     Email2 = c.Mobile2, 
     Fax1=c.Fax1, 
     Fax2=c.Fax2, 
     TinNo=c.TinNo, 
     IsGroupCompany=c.IsGroupCompany 
    }).ToList(); 
+0

我認爲這不會工作,例如,他分配'NewCompany = c.CompanyName'。它必須與數據庫中的名稱相同。任何解決方案給不同的列名稱? – Marshal 2012-04-13 05:00:06

+0

在這個查詢中,我不得不給出同名的表字段的列時,給它不同的名稱列它產生的錯誤 – vipul 2012-04-13 05:01:35

+0

是多數民衆贊成我問。任何建議呢? – Marshal 2012-04-13 05:02:20

1

如果你的意思是數據表,那麼你可以做:

class Program 
{ 
    static void Main(string[] args) 
    { 
     DataTable table = new DataTable(); 
     table.Columns.Add("name", typeof(string)); 
     table.Columns.Add("address", typeof(string)); 
     table.Rows.Add("name 1", "address 1"); 
     table.Rows.Add("name 1", "address 1"); 

     var query = table.AsEnumerable().Select(s => new Company { Name = (string)s["name"], Address = (string)s["address"] }).ToList(); 
    } 
} 

class Company 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 
0
try this :- 
List<Company> companyData = (from c in dataContext.Companies 
select new Company 
{ 
     CompanyName =c.CompanyName, 
     Address1 =c.Address1, 
     Addredd2 =c.Address2, 
     city=c.City.CityName, 
     state =c.State.StateName, 
     country =c.Country.CountryName, 
     Telephone1 =c.Telephone1, 
     Telephone2 =c.Telephone2, 
     Mobile1 =c.Mobile1, 
     Mobile2=c.Mobile2, 
     Email1 =c.Email1, 
     Email2 = c.Mobile2, 
     Fax1=c.Fax1, 
     Fax2=c.Fax2, 
     TinNo=c.TinNo, 
     IsGroupCompany=c.IsGroupCompany 
    }).ToList();