2016-11-14 81 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表達式是無法轉換爲表達式樹。

相關問題