1

我正在尝试编写动态 lambda 或查询,但它发生错误..

对于拉姆达;我创建了一个函数

    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 ) 中得到两个错误,它们是

    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,而 musteriler 是,它不提供接受 lambda 的地方 - 您需要扩展接受 lambda 表达式ObjectSet的 Where 方法。IQueryable

于 2012-06-13T12:05:48.900 回答
-1

在我尝试的示例中,我收到了错误,

方法“Where”没有重载需要 3 个参数

与我使用 SQLParametera 的 where 子句表达式。

我发现我需要

使用 System.Linq.Dynamic;一旦我发现它,DUH

于 2016-12-22T17:47:10.133 回答