0

アプリケーションにダイナミック LINQ ライブラリを使用しています。ダイナミック LINQ ライブラリのサンプルでは、​​カンマ区切りの列名またはプロパティ名の文字列を、以下のように LINQ の select 句に渡すことができます。

以下のように、インスタンス化してプロパティ値をオブジェクトに入力するために、いくつかのオブジェクトを渡すことができますか

.Select("new AccountingObject(AccountingDocumentNbr,DocumentFiscalYearNbr)");

AccountingObject には AccountingDocumentNbr,DocumentFiscalYearNbr があります。Dynamic LINQ Library でそれを行うことは可能ですか? http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

これに関するあなたの意見が必要です..

4

1 に答える 1

2

理論的には、コードは次のようになります。

Function ParseNew() As Expression
    NextToken()
    ValidateToken(TokenId.OpenParen, Res.OpenParenExpected)
    NextToken()
    Dim properties As New List(Of DynamicProperty)()
    Dim expressions As New List(Of Expression)()
    Do
        Dim exprPos = tokenVal.pos
        Dim expr = ParseExpression()
        Dim propName As String
        If TokenIdentifierIs("as") Then
            NextToken()
            propName = GetIdentifier()
            NextToken()
        Else
            Dim [me] As MemberExpression = TryCast(expr, MemberExpression)
            If [me] Is Nothing Then Throw ParseError(exprPos, Res.MissingAsClause)
            propName = [me].Member.Name
        End If
        expressions.Add(expr)
        properties.Add(New DynamicProperty(propName, expr.Type))
        If tokenVal.id <> TokenId.Comma Then Exit Do
        NextToken()
    Loop
    ValidateToken(TokenId.CloseParen, Res.CloseParenOrCommaExpected)
    NextToken()
    Dim type As Type = If(newResultType, DynamicExpression.CreateClass(properties))
    Dim bindings(properties.Count - 1) As MemberBinding
    For i As Integer = 0 To bindings.Length - 1
        bindings(i) = Expression.Bind(type.GetProperty(properties(i).Name), expressions(i))
    Next
    Return Expression.MemberInit(Expression.[New](type), bindings)
End Function

しかし、どうやって Select メソッドを呼び出しているのでしょうか? 多かれ少なかれ次のようになります。

 .Select<ObjectHolder>("new (Activity as Activity, ActivityName as ActivityName)")
于 2013-05-04T21:06:59.723 に答える