linq lambda的SQL语句

时间:2013-06-11 08:06:30

标签: linq lambda

我有这个sql语句:从故事中选择FileURL,其中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<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)'

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

@ SWeko让你知道你遇到的第一个错误,但是你应该注意,如果你想要将一个&#34; SQL语句转换为linq lambda&#34;,您的查询可能没有按预期执行。假设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(从故事中选择FileURL,其中ActivityID =&#39;&#34; listACt&#34; &#39;

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