如何使用 lambda 表达式将 IQueryable 转换为 IQueriable
本文关键字:转换 IQueriable St AnonymousType lambda 表达式 IQueryable 何使用 | 更新日期: 2023-09-27 18:34:13
这是我想要实现的:
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
});
到目前为止,我已经尝试过:
-将查询 1 转换为
(IQueryable<Project.Models.test>)query1
-在关键字"新建"处添加粗鲁键入的名称:
(users, table2) => new IQueryable<Project.Models.test>) ...
(users, table2) => new Project.Models.test ...
-命名列 (用户,表 2( => 新 { 列名称 1 = 用户。用户名, 列名 2 = 表 2。一些价值 });
-以上组合
我都明白有一种方法可以使用普通的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 表达式编写上述语句,则子任务将是。
这是你的意思吗?
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
};
我认为这是不可能的。你可以做
result.AsEnumerable().Select(anonymous => new Typed { Property = anonymous.Property));
但这是非常丑陋的。我还会尝试使用dotPeek查看生成的代码。
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(( 中的属性相对应。
道具去HugoRune让我重新检查我的代码。我想指出的是,Jaap Elgersma anwser allso 解决了这个问题,但不是在 lambda 符号中。
本文关键字:转换 IQueriable St AnonymousType lambda 表达式 IQueryable 何使用 | 更新日期: 2023-09-27 18:34:13
这是我想要实现的:
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
});
到目前为止,我已经尝试过:
-将查询 1 转换为
(IQueryable<Project.Models.test>)query1
-在关键字"新建"处添加粗鲁键入的名称:
(users, table2) => new IQueryable<Project.Models.test>) ...
(users, table2) => new Project.Models.test ...
-命名列 (用户,表 2( => 新 { 列名称 1 = 用户。用户名, 列名 2 = 表 2。一些价值 });
-以上组合
我都明白有一种方法可以使用普通的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 表达式编写上述语句,则子任务将是。
这是你的意思吗?
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
};
我认为这是不可能的。你可以做
result.AsEnumerable().Select(anonymous => new Typed { Property = anonymous.Property));
但这是非常丑陋的。我还会尝试使用dotPeek查看生成的代码。
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(( 中的属性相对应。
道具去HugoRune让我重新检查我的代码。我想指出的是,Jaap Elgersma anwser allso 解决了这个问题,但不是在 lambda 符号中。