是否可以创建投影方法? [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枚举其条目应该工作。

+0

所以当我明白你的权利是不可能创建一个映射方法,并保留IQueryable? – Viper 2012-07-06 10:14:07

+0

不适用于CLR类。你必须保留Linq-To-Sql类,直到你想执行查询。使用不规则类型也是可行的,但由于它们是匿名的,因此您无法在查询周围保留字段。 – Botz3000 2012-07-06 10:19:04