如何解决LINQ查询-如何排序?
| 在调试中我得到 m_tableContext.TemplateTables.OrderBy(a => a.id)表达式不能包含lambda表达式private readonly TamplateTableContext m_tableContext = new TamplateTableContext();
m_tableContext.Load(m_tableContext.GetTemplateTableQuery());
lbTemplateTable.DataContext = m_tableContext.TemplateTables.OrderBy(a => a.id);
如何排序?
解决方法
如果那是一个方法调用,它将无法正常工作。 Silverlight调用是异步的,您必须为Load方法提供回调,以便完成后转储到新方法。
private readonly TamplateTableContext m_tableContext = new TamplateTableContext();
m_tableContext.Load(m_tableContext.GetTemplateTableQuery(),onLoadOperationCompleted);
public void onLoadOperationCompleted(LoadOperation<TemplateTable> lo)
{
if (!lo.HasError)
{
lbTemplateTable.DataContext =
new ObservableCollection<TemplateTable>(lo.Entities.OrderBy(a => a.id));
}
}
这是一个人为的例子。我使用MVVMLight和ServiceLocator模式,所以我显示的内容实际上并不是上下文,因为看起来您可能实际上是在后面的代码中完成所有操作……但我实际上只是在向您展示如何进行回调。
,当前的代码很难分辨。下面的示例使用相同的OrderBy表达式,并且可以编译并正常运行。
public class A { public int ID; }
public static void Test()
{
List<A> listA = new List<A> {new A {ID=7},new A {ID=2},new A {ID=16}};
var query1 = from x in listA orderby x.ID select x;
var query2 = (from x in listA select x).OrderBy(a => a.ID);
foreach(var x1 in query1) Console.WriteLine(\"{0}\",x1.ID);
foreach(var x2 in query2) Console.WriteLine(\"{0}\",x2.ID);
}
实际上,您可能会从有关关键数据类型的信息不足而产生错误。此讨论可能会帮助您。
更新:
啊,是在调试中,就像在调试模式下一样,不是DEBUG目标,是吗?!
如果您试图在快速监视或即时窗口中查看结果-这是预期的错误。这并不意味着代码有问题,只是调试器不喜欢lambda表达式。
,您无法在运行时检查Lambda表达式。它们需要进行编译,即使在运行时更改包含lambda(而不仅仅是lambda本身)的方法也需要重新编译。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。