如何解决Linq 在更改某些变量时选择对象
我在 Linq 中遇到了问题,并且有一个这样的对象:
{"Id": "","tDate": "2021-02-08T13:15:59.5419262Z","innerObject": [
{
"innerObjectId": "","tDate": "2021-02-08T13:15:59.528643Z"
}
],...};
这是连接到一个 api,当它被调用时,我想查询这个对象并返回 ObjectDTO
中的所有属性,同时更改 tDate
以防 {{1} 中有日期(我知道这个条件有效,所以不用担心):
innerObject
但是,我似乎无法完成这项工作。我得到的错误是“带有语句体的 lambda 表达式无法转换为表达式树”和“表达式树可能不包含赋值运算符”。
我尝试过的另一个选项是手动分配 this.query = cosmosDbProvider.GetContainer().GetItemLinqQueryable<ObjectDTO>().AsQueryable()
.Where(t => someconditions)
.Select(o => { o.tDate = o.innerOject.Where(t => t.innerObjectId == input.innerObjectId).Select(t => t.tDate).ToArray()[0] ?? o.tDate;
return o; });
的每个变量,但这看起来很糟糕。
有人有什么想法吗?
解决方法
在这种情况下,我会尝试对“where”结果使用“foreach”。
另外,如果你想使用 LINQ,你可以检查这个 answer。
很高兴记住,如果您正在使用 IQueryable,您应该知道“ToList”方法将在转到“ForEach”之前触发数据库中的实体框架查询。在这种情况下,请尝试查看 this LINQ to SQL 语法
,您需要注意两个枚举……一个是IEnumerable
,它是数据的concreate 表示并且在内存中供访问。还有一个 IQueryable
不是硬性表示,而是一组关于数据外观的可能性,并被发送到数据库而不是内存中。
但是方法 Where
返回一个 IQueryable
,它很好并且可以与其他 IQueryable
返回链接,但是 Select
正在询问更改现有数据的形状(如 IEnumerable
)。
在 ToList()
之后放入一个 IQueryable
(这将使 List<T>
(s) 被执行并返回一个具体的 Where( ... )
对象);这将为 Select
操作提供有效的数据集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。