1

動的ラムダまたはクエリを書き込もうとしていますが、エラーが発生します。

ラムダの場合; 関数を作成しました

    public IEnumerable<musteriler>  GetCustomers<musteriler>(Expression<Func<musteriler, bool>> where)
   {
    IEnumerable<musteriler> _musteriler = market.musteriler.Where(where).Select(m => m);

     return _musteriler;

    }

そして私はそのように呼びます

  IEnumerable<musteriler> _musteriler  = helper.GetCustomers<musteriler>(m => m.MAktif == true);

Where( where)で2つのエラーが発生します。

    The best overloaded method match for System.Data.Objects.ObjectQuery<AkilliMarket.musteriler>.Where(string, params System.Data.Objects.ObjectParameter[])' has some invalid arguments

   Argument 1: cannot convert from 'System.Linq.Expressions.Expression<System.Func<musteriler,bool>>' to 'string'

次のような文字列クエリを試した後

 IEnumerable<musteriler> _musteriler=  market.musteriler.Where("MAktif = true").Select(m => m) as IEnumerable<musteriler>;

はい、動作しますが、_musterilerを使用できません。たとえば、_musteriler.Count();を記述した場合です。このエラーが発生します

  'MAktif' could not be resolved in the current scope or context. Make sure that all referenced variables are in scope, that required schemas are loaded, and that namespaces are referenced correctly. Near simple identifier, line 6, column 1.

MAktifは、db内の私のmusterilerテーブルの列名です。別の列を試しましたが、結果は同じです。

両方の間違いはどこにありますか?

4

4 に答える 4

1

問題はIQueryable<T>.Where拡張メソッドであり、ObjectQuery.Where拡張メソッドが検討される前に「オーバーロードされたメソッドの最適な一致」として選択されます。

試す:

public IEnumerable<AkilliMarket.musteriler> GetCustomers<AkilliMarket.musteriler>(Expression<Func<AkilliMarket.musteriler, bool>> predicate)
{
   return market.musteriler.AsQueryable().Where(predicate);
}
于 2012-06-13T11:58:59.557 に答える
1
public IEnumerable<musteriler>  GetCustomers<musteriler>(Expression<Func<musteriler, bool>> predicate)
       {
        return market.musteriler.AsQueryable().Where(predicate).AsEnumerable();

        }

それが機能しない場合

試してみてください

 var _musteriler=  market.musteriler.Where("it.MAktif = @val", new ObjectParameter("val", true)).AsEnumerable().Count();

それが機能する場合、あなたのメソッドは(メソッドを作成する意味がまだある場合)である必要があります

public IEnumerable<musteriler> GetCustomers(string whereClause, params ObjectParameter[] parameters) {
   return market.musteriler.Where(whereClause, parameters).AsEnumerable(); 
}
于 2012-06-13T12:00:56.637 に答える
0

コードの先頭にこれを追加する必要があると思います。

using System.Linq;

あなたの市場はObjectContextそうであり、集会者はそうであり、ラムダを受け入れる場所を提供していないようです-ラムダ式を受け入れるObjectSetWhereメソッドの拡張が必要です。IQueryable

于 2012-06-13T12:05:48.900 に答える
-1

私が試していた例では、エラーが発生していましたが、

メソッド「Where」のオーバーロードなしは3つの引数を取ります

SQLParameteraを使用したwhere句の式。

必要だとわかった

System.Linq.Dynamicを使用します。私がそれを発見したら、DUH

于 2016-12-22T17:47:10.133 に答える