SQL 语句到 linq lambda

Posted

技术标签:

【中文标题】SQL 语句到 linq lambda【英文标题】:SQL statement to linq lambda 【发布时间】:2013-06-11 08:06:30 【问题描述】:

我有这个 sql 语句:Select FileURL from story where ActivityID = ' "listACt" ' ;

如何将其转换为 linq lambda?

我有这个,但它不工作:

        public IList<Model.story> GetActivityList(int listAct)
     

         IList<Model.story> lstImages = context.stories.ToList();
         return lstImages.Where(c => c.ActivityID == listAct).ToList().Select( a => a.FileURL).ToList();

     

错误显示:无法隐式转换类型'System.Collections.Generic.List&lt;string&gt;' to 'System.Collections.Generic.IList&lt;iStellarMobile.Model.story&gt;'。存在显式转换(您是否缺少演员表?)

编辑---------------

   protected void btnSort_Click(object sender, EventArgs e)
    
        if (dropListActivity.SelectedIndex > 0)
            gvStory.DataSource = daoStory.GetActivityList(Convert.ToInt32(dropListActivity.SelectedItem.Value));
        else
           


        gvStory.DataBind();
     

使用 SWeko 的第二个代码后上述代码出错:

以下方法或属性之间的调用不明确:'iStellarMobile.DAO.DAOStory.GetActivityList(int)' 和 'iStellarMobile.DAO.DAOStory.GetActivityList(int)'

【问题讨论】:

返回List&lt;Model.story&gt; 两个同名同签名的方法真的有歧义吗?顺便说一句,如果gvStory 是一个应该显示故事的 GridView,你可能需要我的第一个代码,而不是第二个。 【参考方案1】:

@SWeko 已经涵盖了您看到的第一个错误,但您应该注意,如果您希望将“SQL 语句转换为 linq lambda”,您的查询可能不会按照您的预期进行。假设context 是一个实体框架上下文或类似的,这个:

IList<Model.story> lstImages = context.stories.ToList();

return lstImages
    .Where(c => c.ActivityID == listAct)
    .Select(a => a.FileURL)
    .ToList();

...执行一条 SQL 语句,从第一行的 stories 表中选择所有内容,然后使用 Linq-to-objects 在内存中执行您的 lambda。考虑将其更改为:

return context.stories
    .Where(c => c.ActivityID == listAct)
    .Select(a => a.FileURL)
    .ToList();

...这将导致您的 lambda 转换为与您之后的语句匹配的 SQL(Select FileURL from story where ActivityID = ' " listACt " ')。

对于您的第二个错误,编译器说您有两个具有相同签名的方法 - iStellarMobile.DAO.DAOStory.GetActivityList(int) - 找到这两个并更改一个,使它们不同。

【讨论】:

【参考方案2】:

您声明您将返回一个 (i) 故事列表,但您返回的是一个 FileURL 列表,根据错误消息,它是一个字符串列表。

你可以这样做

public IList<Model.story> GetActivityList(int listAct)

  IList<Model.story> lstImages = context.stories.ToList();
  return lstImages.Where(c => c.ActivityID == listAct).ToList();

public IList<string> GetActivityList(int listAct)

  IList<Model.story> lstImages = context.stories.ToList();
  return lstImages.Where(c => c.ActivityID == listAct)
                  .Select( a => a.FileURL)
                  .ToList();

【讨论】:

ActivityID 字段是一个 int 列 好吧,比这行得通,问题文本中有很多引号,这让我很失望。 查看我的编辑,我试过你的代码,它在 CRUD 类方面没有显示错误。但是 aspx.cs 端有错误。

以上是关于SQL 语句到 linq lambda的主要内容,如果未能解决你的问题,请参考以下文章

SQL to LINQ - 案例语句

怎么查看linq产生的sql语句

如何控制 Linq to SQL 发出的“SET”语句

LINQ体验(18)——LINQ to SQL语句之视图和继承支持

linq to sql 查询两者之间的语句怎么写,例如7月份到8月份的数据

Linq 语句换成 sql语句,求高手帮忙