2017-07-17 5 views
-1

このlinqクエリのSQLクエリを取得する必要があります。私はlinqpadを使用します。 私はLINQクエリはlinqpadのlinqクエリ実行時のエラー

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

クエリ言語はC#の式であるというエラーを取得する実行.When Idと変数の呼び出しを使用しています。

これを解決するにはどうすればよいですか?

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

エラー:; expected 'in'の表現式が無効です – programmer138200

+0

LINQクエリには複数の 'in'キーワードがあります。犯人を絞ろうとしてもいいですか? – RBT

+0

いいえこれはできません – programmer138200

2

問題は、あなたがここにQuery Languagesの2種類を混合ことです。 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