首先添加表和数据:
--I use db Breaz, you use whatever you require
USE [Breaz]
GO
/****** Object: Table [dbo].[table1] Script Date: 5/4/2017 12:20:45 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[table1](
[Id] [int] IDENTITY(1,1) NOT NULL,
[field1] [varchar](10) NULL,
[field2] [varchar](10) NULL,
[field3] [varchar](10) NULL,
[field4] [varchar](10) NULL,
CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[table2] Script Date: 5/4/2017 12:20:45 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[table2](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Field4Default] [varchar](10) NULL,
CONSTRAINT [PK_table2] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
SET IDENTITY_INSERT [dbo].[table1] ON
GO
INSERT [dbo].[table1] ([Id], [field1], [field2], [field3], [field4]) VALUES (1, N'f1', N'f2', N'f3', N'f4')
GO
INSERT [dbo].[table1] ([Id], [field1], [field2], [field3], [field4]) VALUES (2, N'seconda', N'secondb', N'secondc', NULL)
GO
SET IDENTITY_INSERT [dbo].[table1] OFF
GO
SET IDENTITY_INSERT [dbo].[table2] ON
GO
INSERT [dbo].[table2] ([Id], [Field4Default]) VALUES (3, N'DefaultV')
GO
SET IDENTITY_INSERT [dbo].[table2] OFF
GO
添加EDMX:右键点击Models文件夹,并添加ADO.NET实体数据模型。将其命名为table1并单击确定,突出显示从数据库生成,因此单击下一步。点击新建连接。输入服务器名称。使用Windows身份验证或使用SQL服务器身份验证(凭据),如果后者,请单击保存我的密码。从下拉菜单中选择数据库。点击确定。等待点击'是的,包括敏感..',如果你没有Windows认证。 '保存实体连接..'下面的连接复制到剪贴板。点击下一步。在表格下,选择table1和table2。点击完成。然后点击确定以获得接下来的两个提示(等待它们),然后关闭gui设计器。
这是你的控制器。
public class HomeController : Controller
{
public ActionResult Index63()
{
var table1List = new List<table1>();
//instead of BreazEntities18, use the name you copied to the clipboard
//or lick on table1.context.cs to get the name
using (BreazEntities18 entity = new BreazEntities18())
{
var q = entity.table1.Select(r => new
{
field1 = r.field1,
field2 = r.field2,
field3 = r.field3,
field4 = r.field4 == null ? (entity.table2.Select(s => s.Field4Default).FirstOrDefault())
: r.field4
}
).ToList();
}
return View();
}
您投了票的答案不起作用。请参阅其他答案。你能否告诉我,如果这个方法有效,并告诉我你是否希望我把答案弄清楚。 – kblau
我在下面更新了我的答案,以便它包含一个选择。我并不是说Ashiquzzaman没有解决问题,但我无法让他/她的解决方案工作。 – kblau
你可以做一个连接而不是子查询吗? – Jasen