千家信息网

Linq联合查询表结果集的返回怎么实现

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"Linq联合查询表结果集的返回怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2026年11月03日Linq联合查询表结果集的返回怎么实现

本篇内容介绍了"Linq联合查询表结果集的返回怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

首先,我们先来了解一些Linq联合查询的知识点。

1.匿名类型的传递

static void Main(string[] args)   {   var User = GetAnonymous().Cast(new { UserName = "", LastLoginIp = "" });              Console.Write(User.UserName);       }         static object GetAnonymous()     {     var User = new { UserName = "yaosansi", LastLoginIp = "127.0.0.1" };               return User;     }

当我们定义一个匿名类型,只能通过object类型传递,传递后编译器将无法获悉匿名类型的实际类型。

这行可以通过Cast扩展方法来进行强制转换。以下是Cast方法的原型。

public static T Cast(this object o, T t)       {               return ();         }

2.Linq联合查询之如何生成匿名类型的List?

var User = GetAnonymous().Cast(new { UserName = "", LastLoginIp = "" });         var list = new List();

原理和上面一致。

var User = new   {        UserName = "yaosansi", LastLoginIp = "127.0.0.1" };              var list = User.MakeList();          list.Add(User);            Console.Write(list[0].UserName);

我们再来看看MakeList()方法:

public static List MakeList(this T t)          {                 return new List();      }

当然,你可能想到上面的方法还不够***,需要在List中Add一个User,于是有了下面的方法:

public static List MakeList(this T t,params T[] items)         {               return new List(items);    }

这时调用的时候可以写成:

var User = new   {     UserName = "yaosansi", LastLoginIp = "127.0.0.1"   };              var list = User.MakeList(User);          Console.Write(list[0].UserName);

这回我们切入正题,来了解一下Linq联合查询是怎样实现的。

var q =    from p in db.Products      where p.Supplier.Country == "USA" && p.UnitsInStock == 0    select p;

以上的查询是两个有关系的表,并且返回的只是一个表的内容,这种情况下可以在数据层中返回强类型的List。如:

public List SelectProducts()   {      var q = from p in db.Products            where p.Supplier.Country == "USA" && p.UnitsInStock == 0               select p;               return q.ToList;   }

如果返回的结果集是两个以上表的时候,那该如何传递呢? 聪明的你一定想到了,如果返回的是单行数据的结果集就可以我们前面提到的使用匿名类型的传递得到我们需要的结果. public object

public object SelectProducts()  {      var q = from p in db.Products             where p.Supplier.Country == "USA" && p.UnitsInStock == 0               select new {p.UnitsInStock,p.Supplier.Sid};      var result = q.Single();         return result;   }

但这个前提是业务逻辑层需要知道数据层的匿名类型中的具体类型。这样分层的意义也就不大了。这并不是我们想要的。而且返回多行数据的结果集时用 匿名的List类型 的方法经实验也失败了。

方法一:Linq联合查询自定义与返回类型相同结构的类

public class CustomQuery       {  public uint UnitsInStock      { get; set; }               public int Sid      { get; set; }        }

这样在查询结果为多个表的结果集时,就可以解决了。由于需要知道返回的匿名类型,除了不符合多层以外,还需要额外定义一个类。但这样确时可以使用强类型返回我们所需要的结果。

方法二:Linq联合查询使用System.Func委托 (参考:Returning var from a method in C# 3.0)

数据层:

public IEnumerable GetCustomersWithOrders(Func projection)   {    return from customer in _customers                let customerOrders = from  order in _orders                                     where order.CustomerID = customer.ID                  select projection(customer, customerOrders);  }

业务逻辑层:

var results = GetCustomersWithOrders(  (customer, orders) => new   {    Name = customer.Name,                    OrderCount = orders.Count()        });

这样返回的结果在业务逻辑层里仍然是真正的匿名类型,可以直接使用了。

"Linq联合查询表结果集的返回怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

类型 结果 查询 方法 联合 数据 业务 内容 知识 逻辑 查询表 两个 实际 情况 时候 更多 面的 有关 相同 聪明 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 江苏根荣互联网科技 北京互联网科技有限公司 天津摩尔互联网科技 上海致骋互联网科技 融贸通互联网科技 互联网科技英文翻译 华中科技有哪些互联网大佬 隆华科技工业互联网 米聚互联网科技南京有限公司排面 中国科技创新与世界互联网大会 银行科技岗属于互联网吗 广东工业互联网大赛深圳学泰科技 广州千川互联网科技有限公司 35岁以上互联网科技行业 互联网科技包装股 广东鹅鹅鹅互联网科技有限公司 容联科技互联网电商 广西泛欧互联网科技有限公司 东风日产互联网科技公司叫什么 中关村互联网 科技集团 善班互联网科技有限公司 重庆科技学院互联网 华中科技有哪些互联网大佬 昊天互联网科技有限公司 互联网公司黑科技创始人 深圳艾果互联网通讯科技 上海科技产业互联网平台 宁波跨境商互联网科技有限公司 云南互联网科技学费
0