2015-09-18 5 views
0

У меня возникает следующая ошибка.Заполнение Gridview с использованием запроса LINQ to DataSet с псевдонимом

Поле или свойство с именем «P_ID» не найдено на выбранном источнике данных .

Я хочу связать Gridview с помощью LINQ к DataSet. У меня три таблицы, из которых я хочу их ID's. В запросе я использовал псевдонимы, но это дает мне ошибку, потому что псевдонимы не найдены.

это мой код

string filterSO = "SELECT " + 
         "P.ID AS P_ID, " + 
         "S.ID AS S_ID, " +        
         " RS.LASTNAMER | | ' ' | | RS.FIRSTNAMER AS ReferentName, " + 
         " RS.ID," + 
         " P.STATUSP" + 
         " FROM PLANNING P," + 
         " SHIPPING S," +        
         " REFERENT_SHIPPING RS" +        
         " WHERE S.ID_REFERENT = RS.ID(+)" + 
         " AND S.ID_PLANNING = P.ID" + 
         " ORDER BY P.ID DESC"; 
    using (OracleConnection con = new OracleConnection(ConfigurationManager.ConnectionStrings["DBCS"].ToString())) 
    { 
     con.Open(); 
     OracleCommand cmd = new OracleCommand(filterSO, con); 
     OracleDataAdapter da = new OracleDataAdapter(cmd); 
     DataSet dss = new DataSet(); 
     da.Fill(dss, "office_all"); 
     Session["DATASET"] = dss; 

     var officee_all = from xx in dss.Tables["office_all"].AsEnumerable() 
         select new guards 
         { 
          ID = Convert.ToInt32(xx["P_ID"]), 
          ID_S = Convert.ToInt32(xx["S_ID"]),       

          LASTNAME_R = xx["LASTNAMER"].ToString(), 
          FIRSTNAME_R = xx["ReferentName"].ToString(), 
          ID_R = Convert.ToInt32(xx["ID"]), 
          STATUSP = xx["STATUSP"].ToString() 
         }; 

     GridViewSOFirst.DataSource = officee_all.ToList(); 
     GridViewSOFirst.DataBind(); 
+0

Какую ошибку вы точно получаете? – Sybren

+0

Поле или свойство с именем «P_ID» не было найдено в выбранном источнике данных. –

ответ

0

Поле или свойство с именем «p_id» не найден на выбранном источнике данных

сообщения является самим за себя, это свойство не доступно в классе, который вы использовали, но, видимо, вы пытаетесь связать это свойство.

Поскольку вы выбираете этот столбец в запросе sql, но назначаете его свойству ID, вы должны привязать его к этому свойству.

ID = Convert.ToInt32(xx["P_ID"]) 

Побочного Примечание: вы можете использовать дословный строковый литерал, это делает его гораздо проще написать запрос SQL в C#. Я также предлагаю использовать реальные/анси-соединения. Даже «Oracle рекомендует использовать синтаксис FROM FROM OUTER JOIN, а не оператор объединения Oracle» link.

string filterSO = @"SELECT 
        P.ID AS P_ID, 
        S.ID AS S_ID, 
        RS.LASTNAMER | | ' ' | | RS.FIRSTNAMER AS ReferentName, 
        RS.ID, 
        P.STATUSP 
        FROM PLANNING P, 
        SHIPPING S, 
        REFERENT_SHIPPING RS 
        WHERE S.ID_REFERENT = RS.ID(+) 
        AND S.ID_PLANNING = P.ID 
        ORDER BY P.ID DESC";