Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架内部连接_C#_Entity Framework_Join - Fatal编程技术网

C# 实体框架内部连接

C# 实体框架内部连接,c#,entity-framework,join,C#,Entity Framework,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.

我有两张这样的桌子:

顾客:

  • 电子邮件
  • 用户名
产品:

  • 用户名
  • 产品
我想用用户名、产品和电子邮件来填充一个类

这就是我所拥有的

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“just”返回产品中的所有数据。正如你所说,你想要一个混合,你需要做的不同

我自己将使用匿名类型(或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在重用方面更好,而且您在编写错误名称时遇到的问题更少



很遗憾,仅仅使用SELECTH,C无法工作,因为Linq希望每行只返回一个对象(另外,总是相同的数据类型)。因此,您需要在要返回的对象周围放置一个容器。在这种情况下,可以是匿名类型,也可以是DTO。

您不确定的具体内容是什么?.Single()或查询本身将为您提供什么结果,…?由于它是一个内部联接,如果您不确定内部联接的语法:@Thomas,我想知道我将返回什么值,那么它将只提供同时具有H和C值的结果(where不应该是必需的,因为联接已经具有适当的值)。。。例如,这会用用户名Email和Product填充results类吗?我可以选择H和C吗?更新了我的答案,还包括了为什么像dto/匿名类型这样的步骤是必要的。当然,容器可以像
new{Product=H,Customer=C}
一样简单,非常容易使用。