1

我在使用 EF lambda 表达式时遇到了问题。

partial void StatusCallBackRequired_PreprocessQuery(ref IQueryable<PatientsTelephoneFollowupDetail> query)
{
    var newList = PatientsTelephoneFollowupDetails.OrderBy(x => x.Id).ToList();
    query = query.Where(p => p.PatientsMasterItem.PatientsTelephoneFollowupDetail.OrderByDescending(c => c.Id).FirstOrDefault(c => c.Status == "7") != null);
 }

错误是:

“Microsoft.LightSwitch.IOrderedDataServiceQueryable”不包含“ToList”的定义,并且找不到接受“Microsoft.LightSwitch.IOrderedDataServiceQueryable”类型的第一个参数的扩展方法“ToList”(您是否缺少 using 指令或程序集引用?)

我已经包含了 system.linq 命名空间。

编辑:(基于 D Stanley 代码的结果)

示例数据可以在下面找到,我正在寻找检索突出显示的记录 在此处输入图像描述

但是当前的输出是

在此处输入图像描述

将查询更改为 query.select 仅返回一条记录,但它是错误的记录。

4

2 回答 2

0

几件事要尝试:

投射到IEnumerable<T>

var newList = ((IEnumerable<PatientsTelephoneFollowupDetail>)PatientsTelephoneFollowupDetails.OrderBy(x => x.Id)).ToList();

根据查询结果初始化列表:

var newList = new List<PatientsTelephoneFollowupDetail>(PatientsTelephoneFollowupDetails.OrderBy(x => x.Id)));

编辑 看起来 LightSwitch 没有实现IEnumerable<T>。还有两件事要尝试:

假设它实现IEnumerable,使用IEnumerable.Cast<T>()

var newList = new List<PatientsTelephoneFollowupDetail>(
    PatientsTelephoneFollowupDetails.OrderBy(x => x.Id)
        .Cast<PatientsTelephoneFollowupDetail>()
    );

蛮力:

var newList = new List<PatientsTelephoneFollowupDetail>();
foreach(var item in PatientsTelephoneFollowupDetails.OrderBy(x => x.Id))
    newList.Add(item);
于 2012-04-05T03:50:50.993 回答
0

你需要找到这个类型的定义:Microsoft.LightSwitch.IOrderedDataServiceQueryable

找到后,确认:

它执行IEnumerable<T>吗?如果是这样,您的代码无法访问System.Linq.Enumerable. 您说您正在使用 System.Linq,因此请确保您的项目正在引用System.Core.dll.

如果没有,它是否实施IEnumerable?如果是这样,您可以编写一个foreach循环并将每个项目添加到List<T>您制作的 a 中。

如果不是,请检查属性。通常有一些方法可以得到你可以写一个循环的东西。

于 2012-04-05T03:52:50.503 回答