在使用Linq to SQL查詢多個資料表時,傳回匿名類型結果可能會帶來挑戰。考慮一個場景,您有Dogs表(包含Name、Age和BreedId)和Breeds表(包含BreedId和BreedName)。要檢索所有狗很簡單:
<code class="language-csharp">public IQueryable<Dog> GetDogs() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select d; return result; }</code>
但是,嘗試使用匿名類型傳回帶有對應BreedName的狗會導致編譯錯誤:
<code class="language-csharp">public IQueryable<Dog> GetDogsWithBreedNames() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select new { Name = d.Name, BreedName = b.BreedName }; return result; }</code>
這是因為Linq to SQL 期望傳回 Dog 類型,但查詢產生的是匿名類型。
為了克服這個問題,一個解決方案是建立一個自訂類別來表示所需的結果:
<code class="language-csharp">public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } } public IQueryable<DogWithBreed> GetDogsWithBreedNames() { var db = new DogDataContext(ConnectString); var result = from d in db.Dogs join b in db.Breeds on d.BreedId equals b.BreedId select new DogWithBreed() { Dog = d, BreedName = b.BreedName }; return result; }</code>
此方法建立一個DogWithBreed類,其中包含Dog和BreedName的屬性。然後,查詢選擇此自訂類別的實例,可用於存取所需資料。
以上是如何在沒有編譯錯誤的情況下將加入的數據從LINQ返回到SQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!