2011-05-30 120 views
1

我想數據綁定這個查詢。奇怪的LINQ查詢錯誤

cboTypeStage.DataSource = 
     (
      from ts in tsRepository.GetTable() 
      select new { IdTypeStage = Convert.ToDecimal(-1), Description = "Aucun", NomFormEval = "-" } 
     ) 
     .Union 
     (
      from ts in tsRepository.GetTable() 
      join o in oRepository.GetTable() on ts.IdOrthEvalFormulaire equals o.IdOrthEvalFormulaire 
      where (ts.IdProgramme == Convert.ToDecimal(Session["selectedProg"])) 
      select new { IdTypeStage = ts.IdTypeStage, Description = ts.Description, NomFormEval = ((o.Nom == null) ? "Aucun" : o.Nom) } 
     ); 

,但我似乎無法得到它的工作。我得到一個錯誤:

Unable to cast object of type 'System.Data.Linq.SqlClient.SqlNew' to type 'System.Data.Linq.SqlClient.SqlValue'

我想這個SQL查詢轉換爲LINQ

SELECT -1 AS IdTypeStage, 'Aucun' AS Description, '-' AS NomFormEval 
UNION 
SELECT ts.IdTypeStage AS IdTypeStage, ts.Description AS Description, ISNULL(eref.Nom, 'Aucun') AS NomFormEval FROM TypeStage AS ts 
LEFT OUTER JOIN OrthEvalFormulaire AS eref ON eref.IdOrthEvalFormulaire = ts.IdEvalFormulaire 
WHERE IdProgramme = @IdProgramme 

上的錯誤任何想法?

謝謝。

+2

做聯合查詢的每個部分獨立工作嗎? – Jeff 2011-05-30 14:44:53

+1

順便說一句,你可以使用'NomFormEval = o.Nom ?? 「Aucun」# – abatishchev 2011-05-30 14:47:00

+0

@ JeffN85:他們確實獨立工作。 – Rushino 2011-05-30 14:55:37

回答

1

我認爲你需要使用的毗連作爲答案中描述了這個問題 - Inserting extra data in a linq result but not to the data source or waiting for submiting changes on a context object


此外,請注意,

from ts in tsRepository.GetTable() 
     select new { IdTypeStage = Convert.ToDecimal(-1), Description = "Aucun", NomFormEval = "-" } 

會給你一個額外的「aucun」行對於存儲庫中的每一行 - 我猜這不是你想要的。

+0

「aucun」的意思是英文無。我需要能夠從組合框中選擇任何東西,這就是爲什麼有一個聯盟。我會嘗試concat解決方案。 – Rushino 2011-05-30 14:58:51

+0

太棒了!似乎工作。謝謝。 – Rushino 2011-05-30 15:03:51

1
  • 嘗試使用Concat()代替Join()
  • 嘗試創建不是匿名的類型,但強類型
0

使用工具如LINQER到SQL轉換爲LINQ。工具在這方面比我們更好:-)

請參閱http://www.sqltolinq.com

+0

我想避免使用試用工具。 – Rushino 2011-05-30 15:03:34