是否可以创建投影方法? [LINQ2SQL]
问题描述:
我希望能够做这样的预测:是否可以创建投影方法? [LINQ2SQL]
var result = from record in MyTable
select MapTo(record);
/*
select new RecordModel()
{
RecordId = record.Id,
Property1 = record.Property1
};
*/
private RecordModel MapTo(MyTable dbRecord)
{
return new RecordModel()
{
RecordId = dbRecord.Id,
Property1 = dbRecord.Property1
};
}
,但我总是得到“NotSupportedException异常”(已不支持转换为SQL)。 我不知道这是甚至可能,但它会很好^^
也许这是可能的,当我使用表达式,但我不知道如何编码这样的表达式。
答
Linq尝试将该方法添加到查询中,并发现它无法转换为Sql。
为了能够在Linq查询中执行任何CLR方法,您需要首先执行它的sql部分,以便操作内存中的对象。像这样:
var result = from record in MyTable.ToList()
select MapTo(record);
任何强制MyTable枚举其条目应该工作。
所以当我明白你的权利是不可能创建一个映射方法,并保留IQueryable? – Viper 2012-07-06 10:14:07
不适用于CLR类。你必须保留Linq-To-Sql类,直到你想执行查询。使用不规则类型也是可行的,但由于它们是匿名的,因此您无法在查询周围保留字段。 – Botz3000 2012-07-06 10:19:04