LINQ to SQL 查询中返回匿名类型的方法
在使用 LINQ to SQL 处理多个表时,返回匿名类型可能会遇到挑战。请考虑以下示例:
原始方法:
<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>
此方法成功检索所有犬类信息。但是,如果我们尝试使用匿名类型检索犬类及其品种名称:
<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>
我们会遇到错误,因为编译器期望返回 Dog 类型,而不是匿名类型。
替代方法:自定义类
一种解决方案是创建一个自定义类,例如 DogWithBreed:
<code class="language-csharp">public class DogWithBreed { public Dog Dog { get; set; } public string BreedName { get; set; } }</code>
然后可以修改代码如下:
<code class="language-csharp">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>
这种方法提供了一种类型安全且可重用的解决方案,尽管它需要额外的编码工作。 选择自定义类可以避免匿名类型带来的类型不匹配问题,并提高代码的可维护性和可读性。
以上是如何从 LINQ to SQL 查询返回匿名类型?的详细内容。更多信息请关注PHP中文网其他相关文章!