能否用C#寫個例子出來,我可以轉換成VB.NET語法的
網上找到的:但是出來的所有欄位,不是我想要幾個欄位
Public Function CreateSelecter(Of TSource, TResult)(ByVal fieldNames() As String) As Expression(Of Func(Of TSource, TResult))
Dim param As ParameterExpression = Expression.Parameter(GetType(TSource), "p")
Dim NewTReslut = Expression.[New](GetType(TResult))
Dim bindingList As New List(Of MemberBinding)
For Each fieldName As String In fieldNames
Dim Propertyinfo As PropertyInfo = GetType(TSource).GetProperty(fieldName)
Dim Expr As MemberExpression = Expression.PropertyOrField(param, fieldName)
Dim m As MemberAssignment = Expression.Bind(Propertyinfo, Expr)
bindingList.Add(m)
Next
Dim MemberInit As MemberInitExpression = Expression.MemberInit(NewTReslut, bindingList)
Dim selector As Expression(Of Func(Of TSource, TResult)) = CType(Expression.Lambda(MemberInit, param), Expression(Of Func(Of TSource, TResult)))
Return selector
End Function
public static void Main(string[] args)
{
var q = Test(x => new User{ID=x.ID,Name = x.Name });
Console.ReadLine();
}
public static IEnumerable<User> Test(Func<User, User> selector)
{
return myList.Select(selector);
}
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public bool? IsChild { get; set; }
}
uj5u.com熱心網友回復:
簡單地翻譯了一下版主大人的代碼,但是我覺得完全沒有GET到樓主的意思.
Public Class student
Public name As String
Public sex As String
Public age As Integer
End Class
Public 二年一班 As New List(Of student)
Public Function 學生選擇器(運算式 As Func(Of student, student)) As IEnumerable(Of student)
Return 二年一班.Select(運算式)
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim p1 = New student With {.name = "張三", .age = 8, .sex = "男"}
Dim p2 = New student With {.name = "李四", .age = 9, .sex = "女"}
Dim p3 = New student With {.name = "王五", .age = 8, .sex = "男"}
Dim p4 = New student With {.name = "趙六", .age = 7, .sex = "女"}
二年一班.Add(p1)
二年一班.Add(p2)
二年一班.Add(p3)
二年一班.Add(p4)
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim selected = 學生選擇器(Function(s)
Return New student With {.name = s.name, .sex = s.sex}
End Function).ToList
End Sub
uj5u.com熱心網友回復:
只是用了簡單的包裝,吧 expression運算式 作為了一個變數,換了個地方參考.
樓主應該是要動態組裝expression運算式,就是不能寫死在程式里.
var q = Test(x => new User{ID=x.ID,Name = x.Name });
樓主應該要表達的意思是這樣的吧:
var q = Test("ID,Name");
uj5u.com熱心網友回復:
只是用了簡單的包裝,吧 expression運算式 作為了一個變數,換了個地方參考.
樓主應該是要動態組裝expression運算式,就是不能寫死在程式里.
var q = Test(x => new User{ID=x.ID,Name = x.Name });