sql - 在 .NET 中替换 IQueryable 查询中的特定对象失败
问题描述
我在 .NET Web API 中有两个用查询语法编写的查询(IQueryable)。他们都返回 DTO 模型。
第一个查询返回具有空文本字段 (ApplicationSettingsto.Text) 的所有对象。第二个查询返回包含文本字段(ApplicationSettingsto.Text)中的一些信息的特定对象。
我的目标是仅替换第一个查询中具有相同 KeyName (query1.DTO.KeyName == query2.DTO.KeyName) 的特定实体,以便我的输出包含一些具有空 TextField 的对象和一些具有 TextField 信息的对象。
我可以为此使用查询语法还是需要更改为方法语法?
在我的 DTO 模型和查询下方:
DTO模型
public class ApplicationSettingsDto
{
public string KeyName { get; set; }
// User View
public string Name { get; set; }
public int Typ { get; set; }
// '*' if Node else some value
public string Wert { get; set; }
public string Text { get; set; }
public string DefaultValues { get; set; }
public bool IsNode { get; set; }
}
查询(IQueryable):
// For simplicity I left out the detailed query
var query1; // returns all DTOs with empty Text Field
var query2; // returns only DTOs which contain Informations in Text Field
// This is the query part I don't understand how to implement
var result; // Should replace the specific objects from query1 with objects from query2 if (query2.Object.KeyName.Equals(query1.Object.KeyName))
提前谢谢了 ;)
解决方案
尽管您没有提及,但我们假设您的查询包含相同类型的元素。所以不是第一个序列包含字符串,第二个序列包含DateTimes
.
IQueryable<TSource> query1 = ...
IQueryable<TSource> query2 = ...
因此,如果仅将 query1 中的一些元素替换为 query2 中的元素,那么结果当然也是一个IQueryable<TSource>
.
如果 query2 中有多个对象具有相同的 ,您没有指定您想要什么KeyName
,更糟糕的是:如果 query1 中也有多个对象具有相同的KeyName
。
如果查询中的元素之一为 nullObject
怎么办?在这种情况下,您不能要求Object.KeyName
.
让我们假设所有元素都有一个非 null Object
,并且KeyNames
都是唯一的。
解决方案是 common 上的 GroupJoin Object.KeyName
,如果一个项目中query1
有一个或多个 query2 项目具有相同的Object.KeyName
,则取其中一个 query2 项目(让我们取第一个,好吗?),如果没有匹配的 q2,则取 q1
var result = query1
.GroupJoin(query2, // GroupJoin query1 and query2
q1 => q1.Object.KeyName, // from every query1 element take Object.KeyName
q2 => q2.Object.KeyName, // from every query2 element take Object.KeyName
(q1, matchingQ2s) => // from every q1 with all its matching q2 objects
// take the first matching q2, or q1 if there is none
matchingQ2s.FirstOrDefault() ?? q1
);
简单的来吧您好!
推荐阅读
- java - SelectionTracker.Builder 不工作 IllegalArgumentException
- jquery - 如何在附加行中显示来自 validate() 的错误
- amazon-s3 - 无法使用 java dsl camel 组件连接到亚马逊 s3 客户端
- release - CuDNN 代码仅在发布时提供 CUDNN_STATUS_EXECUTION_FAILED 状态
- php - 使用composer管理c库依赖
- angularjs - 为什么我的服务有一个未知的提供者:$http?
- java - Jackson:向 Map 序列化添加动态字段(例如 @JsonAppend)
- kubernetes - Kubernetes 持久卷与 minikube
- uwp - 将智能卡程序转换为 UWP 时遇到问题
- javascript - $(document).ready vs window.onload vs window.addEventListener