我有一个想要选择我的实体类型的LINQ查询:
static void Main(string[] args)
{
using (var currentContext = new MyContext())
{
var x = (from c in currentContext.GeneralAccounts
select new { CType = c.GetType() }).ToList();
}
}
但是这个查询出错:
错误:LINQ to Entities无法识别方法' System.Type GetType()'方法,并且此方法无法转换为商店表达式。
答案 0 :(得分:6)
你可以尝试这个:
var result = (from c in currentContext.GeneralAccounts
select c).AsEnumerable().Select(x=> new { CType = x.GetType() }).ToList();
您收到错误是因为Linq表达式被转换为SQL,并且由于x.GetType()
无法转换为SQL,因此您需要首先通过调用AsEnumerable来检索记录,然后获取其类型。
答案 1 :(得分:4)
使用像这样的查询时
from c in currentContext.GeneralAccounts
select new { CType = c.GetType() }
然后实体框架或LINQ-to-SQL将尝试从中形成SQL语句。但是对于某些东西,没有等效的SQL语句,在你的情况下,调用GetType()
就是问题。
您要做的是在客户端而不是数据库服务器上执行GetType()
,因此您必须将查询更改为
// this can be translated into a SQL query
(from c in currentContext.GeneralAccounts
select c)
// turns the IQueryable into an IEnumerable, which means
// from now on LINQ-to-Objects is used
.AsEnumerable()
.Select(p => new { CType = p.GetType() })
.ToList()