2010-04-22 70 views
1

因此,我冒險進入Linq和WCF Web服務的世界,我似乎無法使這個奇蹟發生。我有一個非常基本的WCF Web服務,我可以讓我的舊SqlConnection調用工作並返回一個DataSet。但是我不能/不知道如何讓Linq到SQL查詢工作。我猜這可能是一個權限問題,因爲我需要使用一組特定的憑據連接到SQL數據庫,但我不知道如何測試這是否是問題。我試過使用這兩個連接字符串,並且都沒有給我一個不同的結果。如何將Linq設置爲SQL和WCF

<add name="GeoDataConnectionString" connectionString="Data Source=SQLSERVER;Initial Catalog=GeoData;Integrated Security=True" 
     providerName="System.Data.SqlClient" /> 

<add name="GeoDataConnectionString" connectionString="Data Source=SQLSERVER;Initial Catalog=GeoData;User ID=domain\userName; Password=blahblah; Trusted_Connection=true" 
     providerName="System.Data.SqlClient" /> 

這裏是我的服務,只要查詢功能,我有接口添加[OperationContract]

public string GetCity(int cityId) 
     { 
      GeoDataContext db = new GeoDataContext(); 
      var city = from c in db.Cities 
         where c.CITY_ID == 30429 
         select c.DESCRIPTION; 

      return city.ToString(); 
     } 

的GeoData.dbml只中有一個簡單的表與城市的ID列表和城市名稱。我還將DataContext上的「序列化模式」更改爲「單向」,從我讀過的內容中需要爲WCF完成。

當我跑我得到這個作爲返回服務:選擇[T0] [說明] FROM [DBO] [城市] AS [T 0],其中[T 0] [CITY_ID] = @ P0

黨,所以當我寫這個我意識到也許我的查詢都搞砸了?

回答

3

試試這個:

public string GetCity(int cityId) 
{ 
    GeoDataContext db = new GeoDataContext(); 
    var city = db.Cities.SingleOrDefault(c => c.CITY_ID == 30429); 
    return city.DESCRIPTION; 
} 

與您的查詢的問題是,它沒有返回的var一個string,它返回一個IQueryable。因此,當您使用IQueryable的ToString()時,它必須返回由IQueryable表示的SQL查詢的字符串表示形式。

+0

哇!非常感謝!我想我顯然不明白如何正確編寫查詢。至少我知道我今天剩下的時間會做些什麼,爲了提高生產力而做的非常多。 – MisterIsaak 2010-04-22 20:36:27