代码之家  ›  专栏  ›  技术社区  ›  Fredou

第一次我必须为linq2sql创建扩展时,该如何做呢?

  •  0
  • Fredou  · 技术社区  · 15 年前

    我有这一行的财产

    Public ReadOnly Property DateToUniversal(ByVal dt As Nullable(Of Date)) As String
        Get
            Return If(dt.HasValue, dt.Value.ToString("u").Substring(0, 10), "")
        End Get
    End Property
    

    如果我想把它变成

    from n in mydatacontext 
    select new myObj {n.field1,n.field2, DateToUniversal(n.field3)}
    

    它不会一直工作,因为Linq2SQL无法将其转换为SQL查询。

    有办法吗?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Adam Robinson    15 年前

    您必须将其转换为两个查询:

    var query = (from n in mydatacontext select new {n.field1,n.field2, n.field3}).AsEnumerable();
    
    query = from n in query select new {n.field1, n.field2, DateToUniversal(n.field3)};
    

    重要的是 query IEnumerable 而不是 var (或) IQueryable ) 你打电话很重要 AsEnumerable() 这样你就可以回到 IEnumerable<T> ,因为我们希望强制第二个查询对第一个(linq to sql)查询的结果使用linq to对象。

    我现在不在V队前面,但这应该能解决问题。


    感谢伊托森指出 IEnumerable<t> ,不仅仅是 可枚举的 !