2013-08-06 44 views
1

好吧我已經看到許多基於他們的文本的問題可能是這樣的,但不是很完美。說我有這樣的事情在LINQ期間更新屬性值到sql select(涉及連接)

(from r in reports 
         join u in SECSqlClient.DataContext.GetTable<UserEntity>() 
         on r.StateUpdateReportUserID equals u.lngUserID 
         select r). 

如果報告有一堆說reportDTO類,我想從DTO的列表中進行選擇,但在同一時間userEntity一個屬性設置爲一個屬性會怎麼辦那?基本上我希望維護報表上的所有其他字段,但從用戶表中設置用戶名。 (有一個原因,這不是在一個大的查詢獲取報告列表)

我在找什麼就像選擇r).Something(某些LAMBDA設置一個字段到userEntity屬性)。

+0

LINQ在查詢數據方面很出色(畢竟Q是這個樣子的)。更新數據並不好。 – SWeko

+0

我不想更新數據。我正在嘗試更新對象。由於長篇故事的原因,如果與報告不同,我需要在生成的DTO中填充一個字段。我寧願不必將所有字段重新選入新的DTO列表。 –

回答

2

有一個骯髒的方式做到這一點,這是

var repQuery = from r in reports ... select new { r, u }; 
var reps = repQuery.Select(x => { x.r.Property1 = x.u.Property1; return x.r; }; 

然而,當涉及到函數式編程(這LINQ的是,可以說)我喜歡堅持自己的原則,其中之一以防止功能副作用。副作用是函數體外的狀態變化,在這種情況下是屬性值。

另一方面,這是一個有效的要求,所以我會在將查詢轉換爲列表(ToList())之後使用ForEach方法。 Foreach預計引起副作用。或者,我會在IEnumerable<T>(例如DoForAll)上寫一個明確指定的擴展方法,但方法相同,但採用推遲方式。見Why there is no ForEach extension method on IEnumerable?

+0

我不認爲這個例子有效,因爲在第二個選擇中,考慮到我的代碼示例 - 你不再可用。 –

+0

請記住,我正在嘗試做一些事情,如r.Property = u.SomeProperty –

+0

好的工作! –