订购IQueryable Lambda表达式

时间:2012-04-05 02:23:41

标签: c# linq entity-framework linq-to-sql visual-studio-lightswitch

我在跟踪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'的定义,并且没有扩展方法'ToList'接受类型'Microsoft.LightSwitch.IOrderedDataServiceQueryable'的第一个参数可以找到(你是否缺少using指令或汇编参考?)

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

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

示例数据可以在下面找到,我正在寻找检索突出显示的记录 enter image description here

但是当前的输出是

enter image description here

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

您需要找到此类型的定义:Microsoft.LightSwitch.IOrderedDataServiceQueryable

找到后,请确认:

是否实施IEnumerable<T>?如果是这样,您的代码无法到达System.Linq.Enumerable。您说您正在使用System.Linq,因此请确保您的项目引用System.Core.dll

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

如果没有,请检查属性。通常有一些方法来获得你可以编写循环的东西。