从多个表创建LINQ选择 [英] Creating a LINQ select from multiple tables

查看:45
本文介绍了从多个表创建LINQ选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此查询效果很好:

var pageObject = (from op in db.ObjectPermissions
                  join pg in db.Pages on op.ObjectPermissionName equals page.PageName
                  where pg.PageID == page.PageID
                  select op)
                 .SingleOrDefault();

我在"op"字段中输入了一种新类型.现在我也想检索我的"pg"字段,但是

I get a new type with my 'op' fields. Now I want to retrieve my 'pg' fields as well, but

select op, pg).SingleOrDefault();

不起作用.

如何从两个表中选择所有内容,以便它们出现在新的pageObject类型中?

How can I select everything from both tables so that they appear in my new pageObject type?

推荐答案

您可以为此使用匿名类型,即:

You can use anonymous types for this, i.e.:

var pageObject = (from op in db.ObjectPermissions
                  join pg in db.Pages on op.ObjectPermissionName equals page.PageName
                  where pg.PageID == page.PageID
                  select new { pg, op }).SingleOrDefault();

这将使pageObject成为匿名类型的IEnumerable,因此AFAIK您将无法将其传递给其他方法,但是,如果您只是简单地获取要在当前方法中使用的方法中要使用的数据,很好.您还可以使用匿名类型命名属性,即:-

This will make pageObject into an IEnumerable of an anonymous type so AFAIK you won't be able to pass it around to other methods, however if you're simply obtaining data to play with in the method you're currently in it's perfectly fine. You can also name properties in your anonymous type, i.e.:-

var pageObject = (from op in db.ObjectPermissions
                  join pg in db.Pages on op.ObjectPermissionName equals page.PageName
                  where pg.PageID == page.PageID
                  select new
                  {
                      PermissionName = pg, 
                      ObjectPermission = op
                  }).SingleOrDefault();

这将使您说:-

if (pageObject.PermissionName.FooBar == "golden goose") Application.Exit();

例如:-)

这篇关于从多个表创建LINQ选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆