2014-09-04 3 views
-2

У меня есть таблица с именем Pinfo, которую я хочу сделать, это получить записи из db с помощью запроса Linq и вернуть его. Но я не мог этого сделать. Это то, что у меня есть до сих пор. Как я могу сделать эту работуКак сделать DataTable как Enumerable

List<ProductInfo> getList() 
{ 
    List<ProductInfo> pi = new List<ProductInfo>(); 
    using (SqlConnection con = new SqlConnection("server=.\\sqlexpress;database=Project;User Id=sa;Password=1")) 
    { 
     con.Open(); 
     using (SqlCommand cmd = new SqlCommand("select * from PInfo", con)) 
     { 

      SqlDataAdapter adp = new SqlDataAdapter(cmd); 
      DataTable dt = new DataTable(); 
      var query = from c in dt.AsEnumerable() 
         select new 
         { 
          id = c.Field<int>("Id"), 
          name = c.Field<string>("Name"), 
          price = c.Field<decimal>("Price") 

         }; 
      adp.Fill(query); 
     } 
    } 

    return pi; 
} 
+0

Я думаю, что вы забыли запустить фактический запрос перед повторением результатов – Greenonion

+0

Стол пуст. Вы не можете использовать ADO.NET, как если бы это был Linq-To-SQL. Сначала вы должны использовать 'adp.Fill (dt)'. Затем вы можете использовать 'Linq-To-DataTable' (' Linq-To-Objects') для запроса таблицы. –

ответ

0

Попробуй так

DataTable dt = new DataTable(); 
dt.Load(cmd.ExecuteReader()); 

return (from c in dt.AsEnumerable() 
     select new ProductInfo 
       { 
        id=c.Field<int>("Id"), 
        name=c.Field<string>("Name"), 
        price=c.Field<decimal>("Price") 

       }).ToList(); 
  • вы не должны создавать анонимные типы, если вы хотите, чтобы вернуть список ProductInfos
  • Вам не нужно SqlDataAdapter, просто используйте Load метод DataTable.
Смежные вопросы