首页 > 解决方案 > 如何使用 LINQ 连接多个选择?

问题描述

我有如下所示的主要选择:

protected IQueryable<Answers> GetActualAnswers<TAns>(DateTime? start, DateTime? end, long? statusId) where TAns: AnswersBase
{
_contex.Set<TAns>.Where(x => x.Type == VoteType.Good)
.Select(vv => new Answers
        {
             CreatedAt = vv.CreatedAt,
             StatusId = vv.StatusId,
             Type = vv.Type ,
             AnswerInGuideStatusId = vv.AnswerInGuideStatusId
        }
}

我在两个简单的查询中使用此方法:

 var result1 = GetActualAnswers<JournalAnswers>(start, end, statusId)
    .Select(j => new UnitedAnswers
    {
         Question = j.Question,
    }

    var result2 = GetActualAnswers<BoAnswers>(start, end, statusId)
    .Select(b => new UnitedAnswers
    {
         Prospects = b.Prospects ,
    }

var mainResult = result1.Concat(result2);

我收到错误:

Sql = Sql = '((System.Data.Entity.Infrastructure.DbQuery<UnitedAnswers>)result1).Sql' threw an exception of type 'System.NotSupportedException'
Sql = Sql = '((System.Data.Entity.Infrastructure.DbQuery<UnitedAnswers>)result2).Sql' threw an exception of type 'System.NotSupportedException'
Sql = Sql = '((System.Data.Entity.Infrastructure.DbQuery<UnitedAnswers>)mainResult).Sql' threw an exception of type 'System.NotSupportedException'

是否可以使用多个选择?可能有人可以对此查询提供建议吗?

标签: c#linqselect

解决方案


首先,我想知道你在哪里得到了属性j.Questionb.Prospects而在方法中GetActualAnswers你没有得到上面 2 个属性的值。

其次,在GetActualAnswers你返回的方法上IQueryable,所以你应该检查empty而不是null

那么你的情况可能看起来像这样

var mainResult = Enumerable.Concat(
resut1 ?? Enumerable.Empty<UnitedAnswers>(),
resut2 ?? Enumerable.Empty<UnitedAnswers>()

或者

  var mainResult = Enumerable.Concat(
    result1.AsEnumerable(),
    result2.AsEnumerable());

以下链接对您有用。

  1. 如何合并两个 IQueryable 列表
  2. 枚举.AsEnumerable

推荐阅读