如何使用 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 表达式编写上述语句,则子任务将是。

如何使用 lambda 表达式将 IQueryable<AnonymousType> 转换为 IQueriable<St

这是你的意思吗?

    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 符号中。