c# - 如何使用从查询中提取的另一个对象的值设置 linq 查询中所有项目的属性?

标签 c# linq properties extension-methods

我有一个从数据库中提取的查询:

List<myClass> items = new List<myClass>(from i in context
                      select new myClass
                      {
                          A = i.A,
                          B = "",    // i doesn't know this, this comes from elsewhere
                          C = i.C
                      }

我还有另一个查询在做类似的事情:

List<myClass2> otherItems = new List<myClass2>(from j in context
                            select new myClass2
                            {
                                A = j.A,   // A is the intersection, there will only be 1 A here but many A's in items
                                B = j.B
                            }

实际上,这些类要大得多,而且查询数据不仅被数据库分隔开,而且还被服务器分隔开。是否可以使用 LINQ 查询为 items.A 相交的所有 items 填充属性 B?所有内置的 LINQ 谓词似乎只用于聚合、选择或 bool 表达式。

在我的脑海里,我有这样的想法,但这一切都没有了:

items.Where(x => x.B = (otherItems.Where(z => z.A == x.A).Single().B));

或者我试图在 LINQ 中完成这项工作是不是太可笑了,应该放弃它以支持实际设置变得微不足道的 for 循环?由于截止日期,我将求助于 for 循环(从长远来看,它最终可能会变得更具可读性),但是这样做有可能吗?是否需要扩展方法来添加特殊谓词以允许这样做?

最佳答案

LINQ 专为查询而设计。如果您尝试设置 东西,您绝对应该使用循环(可能是foreach)。这并不意味着您将无法使用 LINQ 作为该循环的一部分,但您不应该尝试在 LINQ 本身内应用副作用。

关于c# - 如何使用从查询中提取的另一个对象的值设置 linq 查询中所有项目的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7851890/

相关文章:

c# - 如何使用 Linq 和 C# 迭代从字典返回的列表

c# - 为什么要预先加载实体?

c# - 为什么我不能在公共(public)抽象类的方法中使用 Linq Where 子句?

c# 语法和 Linq,IQueryable

C# 属性封装

c# - 我如何获得完成在其属性值中建立的要求的所有类属性?

C++ - 如何从包含必须忽略的行的文件中读取

c# - 使用 System.Data.Sqlite 进行 Sqlite 在线备份

c# - 如何在 View 中打印来自 Controller 的 linq 查询结果?

c# - 从 XML 数据反序列化数组(在 ServiceStack 中)