Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确编写LINQ Concat查询_C#_Linq_Asp.net Core 3.1 - Fatal编程技术网

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()你也可以试一下,用工会代替康卡特吗?