以下是我想要达成的目标:
int id = 1;
var db = new Project.Models.Context();
var query1 = db.Users.Where(t => t.id == id);
//here is where the problem starts
IQueryable<Project.Models.test> test = query1.Join(db.Table2,
users => users.id,
table2 => table2.userId,
(users, table2) => new
{
users.UserName,
table2.SomeValue
});
到目前为止我已尝试过:
-cast query1 to
(IQueryable<Project.Models.test>)query1
- 在关键字new上添加storgly类型名称:
(users, table2) => new IQueryable<Project.Models.test>) ...
(users, table2) => new Project.Models.test ...
-naming colums (users,table2)=&gt;新 { ColumnName1 = users.UserName, ColumnName2 = table2.SomeValue });
- 上述组合
我也理解有一种方法可以使用普通的sql表达式来解决这个问题:
select new Project.Models.test
{
ColumnName1 = users.UserName,
ColumnName2 = table2.SomeValue
}
但我想用lambda表达式写这个,如果可能的话。
我是第一次发表海报和长期读者,希望所有内容都写得正确而清晰。
ps:我也冒昧地简化变量名和连接查询。
编辑:
为了完成: 将查询保存在匿名变量joinedTable中,然后使“插入”语句有效。
IQueryable<Project.Models.test> tst = from a in joinedTable
select new Project.Models.test
{
UserName = a.UserName,
SomeValue = a.SomeValue
};
因此,如果可以使用lambda表达式编写上述语句,那么子命令就是。
答案 0 :(得分:0)
这是你的意思吗?
IQueryable<Project.Models.test> query =
from u in db.Users
join t in db.Table2 on u.id equals t.userId
where u.id == id
select new Project.Models.test
{
UserName = u.UserName,
SomeValue = t.SomeValue
};
答案 1 :(得分:0)
我认为这是不可能的。你可以做到
result.AsEnumerable().Select(anonymous => new Typed { Property = anonymous.Property));
但那非常难看。我还尝试使用dotPeek查看生成的代码。
答案 2 :(得分:0)
anwser是:
int id = 1;
var db = new Project.Models.Context();
var query1 = db.Users.Where(t => t.id == id);
//here is where the problem starts
IQueryable<Project.Models.test> test = query1.Join(db.Table2,
users => users.id,
table2 => table2.userId,
(users, table2) => new Project.Models.test()
{
columName1 = users.UserName,
columName2 = table2.SomeValue
});
ColumnNames必须与新Project.Models.test()中的属性相对应。
Props去HugoRune让我重新检查我的代码。我还想指出,Jaap Elgersma anwser也解决了这个问题,但不是用lambda表示法。