我有这个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)'
答案 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)
- 找到两个并更改一个以使它们不同。