2017-07-17 155 views
-1

我需要得到這個linq查詢的sql查詢。我使用linqpad。 我用Id變量調用。當執行LINQ查詢得到錯誤linqpad中linq查詢執行錯誤

) or end of expression expected (change the Query Language to 'C# Statements' for multi-statement queries)

查詢語言是C#中的表達。

如何解決這個問題?

Id=110000; 
from u in BusProvinces 
where (from s in BusProvinces 
     join buscities in BusCities on s.Id equals buscities.ProvinceId 
     join buspath in BusPaths on buscities.Id equals buspath.DesId 
     where (buspath.DepId == Id || Id == 0) 
     select s.Id).Contains(u.Id) 
select u 

enter image description here

+5

答案是錯誤聲明。更改查詢語言。 –

回答

1

變化從工具欄上面的代碼編輯器中的查詢語言C# statements

enter image description here

+0

錯誤:;預期 'in'表達式中的'term'' – programmer138200

+0

LINQ查詢中有幾個'in'關鍵字。你可以請嘗試縮小罪魁禍首嗎? – RBT

+0

不,這是不可能的 – programmer138200

2

的問題是,你混合兩種Query Languages這裏。 雖然Id=110000;single-line statement

from u in BusProvinces 
where (from s in BusProvinces 
     join buscities in BusCities on s.Id equals buscities.ProvinceId 
     join buspath in BusPaths on buscities.Id equals buspath.DesId 
     where (buspath.DepId == Id || Id == 0) 
     select s.Id).Contains(u.Id) 
select u 

是一個Expression

簡單的解決方案:將您的Linq表達式包裝在var中。

var query = (from u in BusProvinces 
where (from s in BusProvinces 
     join buscities in BusCities on s.Id equals buscities.ProvinceId 
     join buspath in BusPaths on buscities.Id equals buspath.DesId 
     where (buspath.DepId == Id || Id == 0) 
     select s.Id).Contains(u.Id) 
select u); 

全碼:

Id=110000; 
var query = (from u in BusProvinces 
where (from s in BusProvinces 
     join buscities in BusCities on s.Id equals buscities.ProvinceId 
     join buspath in BusPaths on buscities.Id equals buspath.DesId 
     where (buspath.DepId == Id || Id == 0) 
     select s.Id).Contains(u.Id) 
select u); 
+0

錯誤:)或預期的表達式結束(將查詢語言更改爲針對多語句查詢的「C#語句」) – programmer138200