【问题标题】:how to linq to sql query for getting records of two columns?如何 linq to sql 查询以获取两列的记录?
【发布时间】:2023-03-07 11:51:01
【问题描述】:

我想从两个表中获取数据,但它在.ToList() 上显示语法错误,即类型不匹配。

这是我的代码

List<activity> ObjActivitys = new List<activity>();

ObjActivitys = (from cn in _Context.activities
                join ac in _Context.activity_event on cn.id equals ac.activity_id
                where cn.lead_id == id 
                select new { cn, ac }).ToList();

请帮助我。

【问题讨论】:

  • 为什么不添加一个从活动到活动的导航属性,而只选择你的活动?
  • 没有导航属性能解决吗?

标签: c# asp.net sql-server asp.net-mvc-4


【解决方案1】:

删除List ObjActivitys = new List&lt;activity&gt;() 命令

并且只使用:

 List<object>  objActivitys = (from cn in _Context.activities
                    join ac in _Context.activity_event on cn.id equals ac.activity_id
                    where cn.lead_id == id 
                    select new { cn,ac }).ToList();

您的 linq 查询返回您尝试分配给活动变量列表的匿名类型列表。这就是您收到类型不匹配错误的原因。

您可以将 objActivitys 传递给任何其他函数。如果你想访问 cn 和 ac 属性,你可以这样做:

foreach(object activity in objActivitys)
{
   dynamic d = activity;
   // do something with  d.cn
   // do something with d.ac
}

【讨论】:

  • 我无法删除,因为我将在下一步中返回无法获取 var 的对象列表。 return HelperConversion.MapActivityToDO(ObjActivitys);
  • 我更新了我的答案。 objActivies 的类型是 List,您可以将其传递给 MapActivityToDO 函数
  • 仍然给出相同的错误,键入未匹配并且映射器也给出错误。
  • 您需要更改映射器方法以接受 List 而不是 List
  • 它唯一的要求是这样的,我在同一个映射器中有其他不需要这个的方法。那我该怎么办?
【解决方案2】:

然后您应该选择对象类型:

如果您的activity 看起来像这样:

public class activity
{
public activity Your_Prop1  {get;set;}
public activity_event Your_Prop2  {get;set;}

}

然后可以在select语句中设置Your_Prop1Your_Prop2

List<activity> ObjActivitys = new List<activity>();

ObjActivitys = (from cn in _Context.activities
                join ac in _Context.activity_event on cn.id equals ac.activity_id
                where cn.lead_id == id 
                select new activity{ Your_Prop1 = cn, Your_Prop2 = ac }).ToList();

编辑:

如果您在 acitivty 和 activity_event 表之间存在一对多关系 - 那么模型应该如下所示:

public class activity
{
public int id {get;set;}
//other properties

//
public virtual ICollection<acitivity_event> activity_events { get; set; }

}

所以当你选择一个活动时:

var myObj = dbContext.acitivty.First(s => s.id == 1);

您应该能够像这样访问 acitivty_events:

var thisActivityEvents = myObj.acitivty_events.ToList();

【讨论】:

  • dawood bhai,activity类没有activity event的属性,两张表不一样?
  • 那么创建一个 DTO,如果你想同时选择你需要一个 DTO 的东西,或者扩展 Activity 类
  • 每张桌子我都有做。
  • 问题是我不明白你为什么要进行内部连接 ​​- 如果你通过 ID 选择活动,那么你在该对象中有一个活动事件列表 - 因为对我来说它看起来像一个activity 和 acitivty_events 之间的 1-many 关系,所以在 EF 中你不需要 Inner join
  • @NomanAhmad 你可以有多个 DTO / 表你可以有 10 个 DTO 的 DTO 取决于你需要的数据。不是数据库架构,请查看我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多