在linq期间更新属性值到sql select(涉及连接)

时间:2013-08-06 14:20:33

标签: linq

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

(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属性)。

1 个答案:

答案 0 :(得分: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)上编写一个明确命名的扩展方法,该方法执行相同的操作,但是以延迟方式执行。请参阅Why there is no ForEach extension method on IEnumerable?