2016-11-14 76 views
-1

使用LINQ到对象有没有办法使用内联方法分配属性而不单独定义方法?如何在分配给对象时使用内联方法

例如,我有一个名单,我遍历(结果)与来自LINQ语句中指定的值来创建一个新的列表(testObjects)。 TestProp属性具有复杂的逻辑来填充它,所以我想在LINQ语句的内联方法中执行该逻辑,而不是调用单独的方法。

为了简单起见,当分配下面的TestProp时,我有一个名为DriverID的属性,它是一个字符串值。在这个任务中,我需要确保DriverID在分配之前是一个GUID,如果是,则将其分配给TestProp。如果不分配新的Guid();

var testObjects = results.Select(row => new 
    { 
    Name = row.Name, 
    Address = row.Address, 
    TestProp = //I don't want to call a method like ConvertToGUID() here, I would rather do the work directly in the LINQ statement with something like 
       { 
       //Do the work here instead by performing all the logic inline within this LINQ statement.    
       } 
    } 

我知道你可以在这里直接调用一个方法来分配TestProp,但有一种方法来保持在1个LINQ呼叫属性赋值的所有方法,逻辑正确,而不是,所以我不必须定义一个单独的方法为了获得TestProp值需要发生的工作?

+1

你是否在使用LINQ to Objects(它只需要委托)或EF等,需要表达式树? –

+0

Linq到对象。 – mameesh

+0

我编辑了这个问题,希望能让它更清楚我正在寻找的东西。 – mameesh

回答

3

如果你使用LINQ to Objects,你的lambda表达式只需要转换成一个委托。所以,你可以使用类似:

var testObject = results.Select(row => { 
    // Several statements here, as you wish 
    int x = row.X; 
    int y = row.Y; 
    int z = x + y; 
    return new { 
     testProp = z, 
     ... 
    } 
}); 

这不会使用Queryable虽然LINQ提供帮助,因为声明健全lambda表达式是无法转换为表达式树。

相关问题