C#中LINQ多条件JOIN时为什么可以使用匿名类
作者:HNLY 发布时间:2023-01-24 15:38:21
标签:linq,多条件,匿名类
前言
本文主要介绍的是关于C#中LINQ多条件JOIN时为什么可以使用匿名类的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧
我们先来看一下linq中如何在join中指定多个条件
public ActionResult Edit(int id)
{
using (DataContext db = new DataContext(ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString))
{
IQueryable<ClassInformation> result = from c in db.GetTable<TClass>()
join t in db.GetTable<TTeacher>()
on new { id = c.ID, id1 = c.ID }
equals new { id = t.ClassID, id1 = id }
select new ClassInformation { ID = c.ID, ClassID = t.ClassID, Name = c.Name, TeacherName = t.Name, Address = t.Address, Phone = t.Phone, Email = t.Email };
ClassInformation k = result.Single();
ViewData["K"] = k;
return View();
}
}
C#中LINQ多条件JOIN时为什么可以使用匿名类
最近心血来潮突然想弄明白为什么LINQ中多条件JOIN的时候,使用new 匿名类就能成功,这是为什么呢?为什么LINQ用的equals 而不是常见的“==”?
随后,进行了如下的测试,发现equals对匿名类对象和具名类对象的处理不太一致
进一步了解才发现,
C#中,对匿名类的做了重写,使得最开始LINQ中的条件判断能够成功。不过,根据测试能发现,要让两个匿名对象相等,属性属性,属性名和属性值都必须一致才行。
进一步了解为什么equals对具名类对象的表现与匿名类对象的差异,发现equals只是object的虚方法,测试中自定义的类没有重写equals,再调用中调用了objects的方法而返回false。同时,也可以参考这个朋友的文章了解更多。
如下,是从SO上找到的关于“==”与equals的区别,
所以,通常equals比较的两个对象的内容,“==”比较的是两者是否是同一个东西。在自定义的类中,如果要用到对象比较,可以根据需要重写equals来控制判断逻辑。
来源:http://www.cnblogs.com/albertzhg/p/9562142.html


猜你喜欢
- 负载均衡使用微服务后,为了能够承担高并发的压力,同一个服务可能会启动多个实例。这时候消费者就需要负载均衡,把请求分散到各个实例。负载均衡主要
- 目录前言系统调用的分类同步回调实例异步回调实例基于Future的半异步小结前言先让我们通过一个生活中的场景来还原一下回调的场景:你遇到了一个
- maven thin jar 步骤spring-boot-maven-plugin configuration &
- Contact联系人对Mms来说是十分重要的,因为每一个对话的收信人都是一个联系人,新建信息时可以输入联系人的任何信息,比如号码或名字,Mm
- 最近“全网域(Web Scale)”一词被炒得火热,人们也正在通过扩展他们的应用程序架构来使他们的系统变得更加“全网域”。但是究竟什么是全网
- 一、问题描述在C#中is,as,using关键字具有其特点及使用场景,其中is关键字用于检查该对象是否与给定类型兼容,as关键字用于将对象转
- 本文介绍一些Java初学者常问的问题,可以用%除以一个小数吗? a += b 和 a = a + b 的效果有区别吗? 声明一个数组为什么需
- springboot2.x暴露健康状况通过prometheus监控加入依赖 <!--prometheus监控 https://prom
- 开发环境:jdk版本:JDK8maven版本:maven-3.5.2开发工具:Itellij IDEA 2017.1前提条件:已安装以上软件
- 一、定义登录控制器目录结构代码:1、创建TUser类package com.demo.pojo;import lombok.AllArgsC
- 申请百度地图密钥以及查看百度API网址:http://lbsyun.baidu.com/apiconsole/key#/home网址:htt
- 声明:本文中资源全部收集整理于网络并无偿提供,仅可用于个人学习交流;请勿转载、售卖或商用;侵权联删!免责声明:本教程所有资源均来源于网络;仅
- Thread类相对于线程池中的线程,使用者有更多的控制权。该类允许创建前台线程,设置线程优先级等。Thread类的构造函数重载为接受Thre
- 先看实例 代码如下 classip { privatestaticlongiptolong(stringstrip) //将127.0.0.
- 递归生成一个如图的菜单,编写两个类数据模型Menu、和创建树形的MenuTree。通过以下过程实现:1.首先从菜单数据中获取所有根节点。2.
- 官网文档背景项目A中需要多数据源的实现,比如UserDao.getAllUserList() 需要从readonly库中读取,但是UserD
- @Value("${xxx}")取properties时中文乱码(1)检查spring的配置文件中,properties
- Android 8.0推出了PictureInPicture(画中画功能),目前只有在8.0以上的系统上支持。对比IOS,IOS的Pictu
- 本文实例讲述了C#读取文本文件到listbox组件的方法。分享给大家供大家参考。具体实现方法如下:private void AddTxtTo
- 把SpringBoot项目打包成Docker镜像有两种方案:全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地