将sql语句转换为lambda以用于razor页面

本文关键字:用于 razor 页面 lambda sql 语句 转换 | 更新日期: 2023-09-27 18:25:33

我有这个从web表单项目中选择的语句,我想转换它,这样我就可以在我的mvc项目中使用它来显示在剃刀页面的下拉列表中

<asp:SqlDataSource ID="Sections" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnection %>" 
                SelectCommand="SELECT e.DisplayName,  e.ID , e.GUID
                FROM Table1 e
                INNER JOIN RootTables re
                ON e.ID = re.Table1ID
                AND re.ChairID = 1">
            </asp:SqlDataSource>

我认为它的开头是:var sCommand = (from e in Table1....);

将sql语句转换为lambda以用于razor页面

它非常直接。查询应该是这样的:

var results = 
    from e in db.Table1
    join re in db.RootTables re
    on e.ID equals re.Table1ID
    where re.ChairID == 1
    select new { e.DisplayName, e.ID, e.GUID };

或者用流利的语法:

var results = 
    db.Table1.Join(db.RootTables, 
        e => new { e.ID, ChairID = 1 }, 
        re => new { ID = re.Table1ID, re.ChairID },
        (e, re) => new { e.DisplayName, e.ID, e.GUID }); 

如果你已经适当地设置了导航属性,它会变得更容易:

var results = 
    from e in db.Table1
    where e.RootTables.Any(re => re.ChairID == 1)
    select new { e.DisplayName, e.ID, e.GUID };

或者用流利的语法:

var results = db.Table1.Where(e => e.RootTables.Any(re => re.ChairID == 1))
                       .Select(e => new { e.DisplayName, e.ID, e.GUID });