2

好的,我已经看到很多基于他们的文字的问题可能是这样的,但不完全是。说我有这样的东西

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

如果报告有一堆说 reportDTO 类,我想从该 DTO 的列表中进行选择,但同时将一个属性设置为 userEntity 中的一个属性,我该怎么做?基本上我希望维护报告上的所有其他字段,但从用户表中设置用户名。(在一个获取报告列表的大查询中没有这样做是有原因的)

我正在寻找的是类似于 Select r).Something(SOME LAMBDA TO SET ONE FIELD TO userEntity property) 的东西。

4

1 回答 1

3

有一种肮脏的方法可以做到这一点,即

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)时,我喜欢坚持它的原则,其中之一是防止函数中的副作用。副作用是函数体外部状态的变化,在这种情况下是属性值。

另一方面,这是一个有效的要求,所以我要么ForEach在将查询转换为列表 ( ToList()) 后使用该方法。Foreach预计产生副作用。或者我会在IEnumerable<T>(例如DoForAll)上写一个明确命名的扩展方法,它做同样的事情,但以一种延迟的方式。请参阅为什么 IEnumerable 上没有 ForEach 扩展方法?.

于 2013-08-06T14:46:42.953 回答