有没有办法在实体框架中的IQueryable对象的select新部分内调用无LINQ方法?

时间:2013-10-26 19:49:58

标签: c# linq entity-framework

我在:

中声明IQueryable<T>对象时遇到此问题
select new { };

部分当我想调用像Tostring()之类的无LINQ方法或我拥有的任何其他函数时如下:

select new
{
    TFPricep = CurrancyHelper.DecimalToCurrency(TFPrice),
    TFDatep = TFDate.Tostring()
};

我收到这条着名的错误消息:

  

LINQ to Entities无法识别方法'foo'。

所以会发生的是我执行ToList()并从数据库中获取数据,之后我将不得不在列表上执行foreach循环并在每个列表上调用ToString()等函数记录哪些有性能问题。据我测试,在LINQ to SQL中没有这样的问题,但Entity Framework

中仍存在此问题

我想知道在查询时是否有任何方法可以调用无LINQ方法,并阻止对每个循环执行此操作?

2 个答案:

答案 0 :(得分:1)

没有

答案 1 :(得分:1)

当我遇到这个问题时,我发现了两种可能的解决方案,但最终决定避免使用Linq to Entities无法翻译的任何内容。

我找到了两个选项:

1)如果您使用的是.edmx文件,请查看: http://msdn.microsoft.com/en-us/library/vstudio/dd456857(v=vs.110).aspx

2)这个其他选项有点丑陋,但不需要.edmx文件:

http://damieng.com/blog/2009/06/24/client-side-properties-and-any-remote-linq-provider https://www.nuget.org/packages/Microsoft.Linq.Translations/ https://github.com/peschuster/PropertyTranslator

最后一条评论:我从未尝试过这些选项,所以我不是百分之百确定他们甚至可以工作,但他们看似合法。