C#LINQ GroupBy错误只能在选择列表中指定一个表达式

时间:2014-11-22 08:00:46

标签: c# linq

我有Linq查询我将它分组为3个字段,它返回结果我想根据键获取分组集合的字段但是当我使用下面的查询时它给我错误

当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。”

以下是我的查询

var patientResults = context.GetTable<PatientResult>().
              Where(r =>
                      r.MeasurementTime < filterValues.DateTo.AddDays(1).Date
                      && r.MeasurementTime >= filterValues.DateFrom
                      && devicesFilter.Contains(r.DeviceId)).
                       GroupBy(x => new { x.MeasurementTime, x.Model, x.DeviceId });


var patientResults12 =patientResults.Select(x => new PatientMeasurementResult()
                 {
                     MeasurementTime = x.Key.MeasurementTime,
                     Model = x.Key.Model,
                     DeviceId = x.Key.DeviceId,
                     PatientId = x.FirstOrDefault().PatientId,
                     PatientName = x.FirstOrDefault().PatientName
                 });

我想要2个元素PatientId和PatientName,我不想将它们包含在groupby中 如果我只是为PatientId或PatientName提供FirstOrDefault()它可以正常工作,但是当我同时给它时它会产生上述错误。

1 个答案:

答案 0 :(得分:0)

只需调用一次FirstOrDefault(),就像这样:

var patientResults12 = patientResults.Select(x =>
{
    var patientMeasurementResult = new PatientMeasurementResult()
    {
        MeasurementTime = x.Key.MeasurementTime,
        Model = x.Key.Model,
        DeviceId = x.Key.DeviceId,
    };

    var result = x.FirstOrDefault();

    if (result != null)
    {
        patientMeasurementResult.PatientId = result.PatientId;
        patientMeasurementResult.PatientName = result.PatientName;
    }

    return patientMeasurementResult;
});