0

我有这个 sql 语句:从 ActivityID = '"listACt"' 的故事中选择 FileURL;

我如何将其转换为 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<string>' to 'System.Collections.Generic.IList<iStellarMobile.Model.story>'。存在显式转换(您是否缺少演员表?)

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

   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)”

4

2 回答 2

2

@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)- 找到这两个并更改一个,以便它们不同。

于 2013-06-11T08:34:54.213 回答
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();
}
于 2013-06-11T08:10:35.823 回答