C# 如何正确编写LINQ Concat查询
以下C# 如何正确编写LINQ Concat查询,c#,linq,asp.net-core-3.1,C#,Linq,Asp.net Core 3.1,以下concat上的LINQ抛出错误 当前不支持对不同存储类型进行设置操作 我试过什么 public class tb3 { public long id { get; set; } public string cat { get; set; } } var data = await (_context.tb1.Select(s => new tb3 { id = s.id, cat = s.category }) // cat is
concat
上的LINQ
抛出错误
当前不支持对不同存储类型进行设置操作
我试过什么
public class tb3
{
public long id { get; set; }
public string cat { get; set; }
}
var data = await (_context.tb1.Select(s => new tb3 { id = s.id, cat = s.category }) // cat is either "R" or "O"
.Concat
(_context.tb2.Select(s => new tb3 { id = s.id, cat = "C" })) // cat is constant "C" here.
).ToListAsync();
这个查询的错误是什么?我将Asp.Net Core 3.1与Postgresql一起使用
第一个是IQueryable
第二个是IQueryable
您有两种解决方案:
- 引入一个带有公共字段的接口/抽象类,并使tb1和tb2成为
- 使用
.Cast
或.Cast
(不建议使用此方法!)
您正在加入两个不同类型的“集合”
第一个是IQueryable
第二个是IQueryable
您有两种解决方案:
- 引入一个带有公共字段的接口/抽象类,并使tb1和tb2成为
- 使用
.Cast
或.Cast
(不建议使用此方法!)
这似乎是一个已知的问题。尝试通过强制物化在本地关闭实体:
await (_context.tb1.Select(s => new { s.id, cat = s.category }.ToList()) // cat is either "R" or "O"
.Concat
(_context.tb2.Select(s => new { s.id, cat = "C" }).ToList()) // cat is constant "C" here.
).ToListAsync();
你可以阅读更多关于它的内容
另一种方法是使用存储过程在服务器上运行查询。这似乎是一个已知问题。尝试通过强制物化在本地关闭实体:
await (_context.tb1.Select(s => new { s.id, cat = s.category }.ToList()) // cat is either "R" or "O"
.Concat
(_context.tb2.Select(s => new { s.id, cat = "C" }).ToList()) // cat is constant "C" here.
).ToListAsync();
你可以阅读更多关于它的内容
另一种方法是使用存储过程在服务器上运行查询。我还有一些类似的查询,不需要添加.ToList()
,也可以正常工作。但是,我只想通过一次往返从服务器获取数据。@Ramesh:如果你阅读我提供的链接,你会看到在内部,它仍然会到服务器进行两次往返,因此似乎没有什么区别。我还有一些类似这样的查询,不需要添加.ToList()
,也可以正常工作。但是,我只想通过一次往返从服务器获取数据。@Ramesh:如果你阅读我提供的链接,你会看到在内部,它仍然会到服务器进行两次往返,因此似乎没有什么不同。另外.ToList()也可以帮助你尝试使用.Union而不是Concat?还有.ToList()你也可以试一下,用工会代替康卡特吗?