c# - 从多个表创建 LINQ 选择

标签 c# 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();

我的“操作”字段得到了一个新类型。现在我也想检索我的“pg”字段,但是

select op, pg).SingleOrDefault();

不起作用。

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

最佳答案

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

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,因此据我所知,您将无法将其传递给其他方法,但是,如果您只是获取要在当前方法中使用的数据,非常好。您还可以在匿名类型中命名属性,即:-

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();

例如:-)

关于c# - 从多个表创建 LINQ 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433/

相关文章:

c# - 添加/删除示例的 MVVM 设计

c# - Windows 模拟 LogonUser 错误

c# - 清理字符串: Replace consecutive nonalphanum Character with single seperator

c# - LINQ:在集合中的集合中搜索单个对象

c# - 如何列出使用 .asmx Web 服务将项目添加到 Sharepoint 列表

c# - 将 GraphQL 从 .NET core 2.2 升级到 3.0

c# - 如何使用 SignalR 保证消息传递?

WHERE 子句中的 LINQ to SQL MAX

c# - 用于构造 OData 查询选项的强类型 Linq

c# - 仅当第二个 TSource 不为 Null 时联合集合