c# - C#中如何将两个对象合二为一

标签 c# linq

var taskMessages = from d in result
                   join ptask in db.ListingTask.Entites on new
                   {
                       d.Id,
                       TaskType = ListingTaskType.Offer.ToString()
                   } equals new
                   {
                       Id = ptask.DraftId,
                       ptask.TaskType
                   } into temp
                   from t in temp.DefaultIfEmpty()
                   select new 
                   {
                       DraftId = d.Id,
                       OfferMessage = t == null || string.IsNullOrEmpty(t.Message) ? "无" : t.Message,
                       OfferSubmitResult = t == null || string.IsNullOrEmpty(t.Result) ? "无" : t.Result,
                       d.UserName,
                       d.UpdateTime,
                       d.Stock
                   };

在这个 LINQ 查询中,当我需要结果中的所有属性时,我需要在 select new {} 中编写每个属性,有没有简单的方法可以做到这一点?

最佳答案

将两个对象放入result对象中:

var taskMessages = from d in result
                   join ptask in db.ListingTask.Entites on new
                   {
                      d.Id,
                      TaskType = ListingTaskType.Offer.ToString()
                   } equals new
                   {
                       Id = ptask.DraftId,
                       ptask.TaskType
                   } into temp
                   from t in temp.DefaultIfEmpty()
                   select new 
                   {
                       // you would obviously need better names
                       object1 = t,
                       object2 = d
                   };

然后像这样访问属性:

taskMessages[0].object2.UpdateTime; //Just as an example

更新(OP想直接使用结果中的所有属性):

您可以通过 C# 交互窗口中的反射获取所有属性的列表,并构造一个字符串输出以粘贴到您的代码中,如下所示:

#r "C:/MyApp/bin/Debug/Foo.dll"
using MyApp;
var myType = typeof(Person);
var myProperties = myType.GetProperties();
foreach(var myProperty in myProperties) { Console.WriteLine($"{myProperty.Name} = myObject.{myProperty.Name},"); }

Foo.dll 是您的程序集,也可以是一个 exe

关于c# - C#中如何将两个对象合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44278644/

相关文章:

c# - 反转图形

c# - 用于在 LINQ 内调用适当类属性的动态变量

c# - 使用未知类型动态构建 LINQ 表达式

c# - 关闭一个表单并在返回到另一个表单时做一些事情

c# - WinForms - MaskedTextBox - "variable-width"屏蔽可能吗?

c# - C# 属性是否隐藏了实例变量或者是否有更深层次的原因?

c# - C# 中的简单 SQLite ORM,代码可以工作,但如何解决竞争条件

linq - C# Linq "join"在 Rust 中的等价物是什么?

c# - 无法在设计 View 中使用用户控件打开 winform

c# - 改文件名显示不改原名