繁体   English   中英

实体框架内部联接

[英]Entity Framework inner join

我有两个这样的表:

顾客:

  • 电子邮件
  • 用户名

产品:

  • 用户名
  • 产品

我想用用户名,产品和电子邮件填写课程。

这就是我所拥有的

var res = from H in db.Products
          join C in db.customers on H.Username equals C.Username
          where C.Username == H.Username
          select H;

Results results = res.Single();

但是要注意的是,我不确定它是如何工作的,有人可以帮我分解一下吗?

  var res = from H in db.Products
                      join C in db.customers on H.Username equals C.Username
                      where C.Username == H.Username
                      select H;

            Results results = res.Single();

上面的代码在C和H之间进行了内部联接(不需要where子句),并在存在适当连接的产品和客户进入的地方返回了所有元素。

选择H“正好”返回产品的所有数据。 正如您所说的那样,您需要以不同的方式进行混合。

我本人将使用匿名类型(或dto对象)。 对于匿名类型:

select new { Username = H.Username, Product = H.Product, EMail = C.EMail}

放在一起:

  var res = from H in db.Products
                      join C in db.customers on H.Username equals C.Username
                      where C.Username == H.Username
                      select new { Username = H.Username, Product = H.Product, EMail = C.EMail}

            Results results = res.Single();

对于DTO(数据传输对象),您将创建一个具有公共set / get属性的类,并使用select new myClass(){....}而不是select new {}。

DTO在重用性方面更好,并且在编写使用错误的名称时,您遇到的问题也较少,.....


只是简单地使用选择H,可悲的是C不能工作,因为Linq希望每行仅返回单个对象(并且总是返回相同的数据类型)。 因此,您需要在要返回的对象周围放置一个容器。 在这种情况下,匿名类型或DTO。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM