0

私はこの sql ステートメントを持っています: ActivityID = '"listACt"';

これをlinqラムダに変換するにはどうすればよいですか?

私はこれを持っていますが、機能していません:

        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 の 2 番目のコードを使用した後の上記のコードのエラー:

次のメソッドまたはプロパティ間の呼び出しがあいまいです: 'iStellarMobile.DAO.DAOStory.GetActivityList(int)' と 'iStellarMobile.DAO.DAOStory.GetActivityList(int)'

4

2 に答える 2

2

@SWeko は、最初に表示されたエラーまでカバーしてくれましたが、「SQL ステートメントを linq ラムダに変換」しようとしている場合は、クエリが期待どおりに動作しない可能性があることに注意してください。contextこれが Entity Framework コンテキストまたは同様のものであると仮定すると、次のようになります。

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

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

...stories最初の行のテーブルからすべてを選択する SQL ステートメントを実行し、Linq-to-objects を使用してメモリ内でラムダを実行します。これを次のように変更することを検討してください。

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

...これにより、ラムダが、後のステートメントと一致する SQL に変換されます (アクティビティ ID = ' " listACt " ' のストーリーから FileURL を選択します)。

2 番目のエラーについて、コンパイラは、同じシグネチャを持つ 2 つのメソッドがあると言っています。2 つiStellarMobile.DAO.DAOStory.GetActivityList(int)を見つけて、1 つを変更して、それらが異なるようにします。

于 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 に答える