c# - 将 sql 语句转换为 lambda 以在 razor 页面中使用

标签 c# asp.net-mvc linq lambda

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

<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....);

最佳答案

这很简单。查询应该是这样的:

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 });

关于c# - 将 sql 语句转换为 lambda 以在 razor 页面中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17930118/

相关文章:

c# 将行添加到datagridview删除其他行的内容

c# - ASP.Net MVC 添加动态 EditorFor 元素

c# - 如何使用正则表达式获取特定值

c# - 何时在 MVC4 中使用包

c# - 禁用输出缓存

c# - 使用 LINQ 连接字符串

C# XML 查找第一个元素后代

c# - .NET MySqlTransactions 是否在本地进行批处理/缓冲?

asp.net-mvc - Pro ASP.net MVC框架代码问题

c# - 如何优化 linq 中将 ~4000 行转换到对象的 "select all"语句?