C#中LINQ多条件JOIN时为什么可以使用匿名类

 更新时间:2020年6月25日 11:16  点击:2046

前言

本文主要介绍的是关于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来控制判断逻辑。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对猪先飞的支持。

[!--infotagslink--]

相关文章

  • MyBatisPlus-QueryWrapper多条件查询及修改方式

    这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-27
  • C#使用linq对数组进行筛选排序的方法

    这篇文章主要介绍了C#使用linq对数组进行筛选排序的方法,实例分析了C#实用linq扩展进行数组排序的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • C#中的Linq Intersect与Except方法使用实例

    这篇文章主要介绍了C#中的Linq Intersect与Except方法使用实例,本文直接给出示例代码,需要的朋友可以参考下...2020-06-25
  • c# Linq常用的小技巧

    这篇文章主要介绍了c# Linq常用的小技巧,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-11-03
  • MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-07-11
  • 使用linq to xml修改app.config示例(linq读取xml)

    这篇文章主要介绍了使用linq to xml修改app.config示例,需要的朋友可以参考下...2020-06-25
  • MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • C#使用linq查询大数据集的方法

    这篇文章主要介绍了C#使用linq查询大数据集的方法,涉及C#调用linq进行数据查询的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#数据绑定之linq使用示例

    本实例以MS AdventureWorks2008Entities数据库为基础,演示了LINQ TO ENTITY、LINQ TO ENTITYSQL和LINQ TO ENTITYCLIENT。...2020-06-25
  • C#使用linq计算执行元素在列表中出现次数的方法

    这篇文章主要介绍了C#使用linq计算执行元素在列表中出现次数的方法,涉及C#使用linq扩展进行列表查询的技巧,需要的朋友可以参考下...2020-06-25
  • C#如何通过匿名类直接使用访问JSON数据详解

    这篇文章主要给大家介绍了关于C#如何通过匿名类直接使用访问JSON数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧。...2020-06-25
  • C#基于Linq和反射实现数据持久化框架Xml4DB详解

    在本篇文章里小编给大家整理的是关于C#基于Linq和反射实现数据持久化框架Xml4DB相关知识点,有需要的朋友们学习下。...2020-06-25
  • C#使用linq语句查询数组中以特定字符开头元素的方法

    这篇文章主要介绍了C#使用linq语句查询数组中以特定字符开头元素的方法,涉及C#使用linq进行查询的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c# Linq查询详解

    这篇文章主要介绍了c# Linq查询的相关资料,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...2021-04-13
  • 全面分析c# LINQ

    这篇文章主要介绍了c# LINQ的相关资料,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-11-03
  • C#中LINQ多条件JOIN时为什么可以使用匿名类

    这篇文章主要给大家介绍了关于C#中LINQ多条件JOIN时为什么可以使用匿名类的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧...2020-06-25
  • 详解LINQ入门(下篇)

    这篇文章主要介绍了详解LINQ入门(下篇),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • c#中的扩展方法学习笔记

    扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型,重新编译或以其他方式修改原始类型。下面这篇文章主要给大家介绍了关于c#中扩展方法学习的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下...2020-06-25
  • C#中Linq延迟查询的例子

    这篇文章主要介绍了C#中Linq延迟查询的例子,本文用一个实例来讲解延迟查询的使用,需要的朋友可以参考下...2020-06-25
  • LINQ操作数组代码(交集,并集,差集,最值,平均,去重复)

    数组是大学里经常拿来做算法练习的对象。一些经典算法非常有价值,考试、装逼、面试都十分有用。但现在是效率时代,编程讲究生产效率,利用LINQ,可以让程序猿避免写一些基本算法,把精力花在业务处理上...2021-09-22