何时使用Expression

IAb*_*act 1 c# .net-4.0 expression-trees

我想确定要使用什么......

我需要IEnumerable<TSource>将一个函数传递给将实体成员的值写入文件的函数.这是IEnumerable的样子:

var persons = new[] {
    new Person {
        RecordID = 0,
        PersonFName = "Joe",
        PersonMName = "",
        PersonLName = "Smith",
        PersonZip="75227"
    }, 
    new Person {
        RecordID = 1,
        PersonFName = "Mary",
        PersonMName = "Hada",
        PersonLName = "Lamb",
        PersonZip="75217"
    }};
Run Code Online (Sandbox Code Playgroud)

将IEnumerable传递给读取每个实体的函数以便读取每个字段值的最佳方法是什么?

我以为我会用以下东西:

void WriteData<TSource>(Expression<IEnumerable<Person>> expression)
{
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

我无法找到解释如何确定何时应该使用Expression而不仅仅是传递IEnumerable的资源.然后,我如何创建反映的表达式persons

理想情况下,似乎我会像这样调用WriteData:

WriteData(persons); 
Run Code Online (Sandbox Code Playgroud)

我是否朝着正确的方向前进?

Jon*_*eet 5

我认为没有理由在那里使用表达式树.如果你只是想通过反射来获取所有属性,我建议你这样做 - 表达树不会真的帮助你做到这一点.

请注意,选择很少在Expression和之间IEnumerable<T>- 它通常在表达式树和委托之间,或者在IEnumerable<T>和之间IQueryable<T>.