【发布时间】:2015-12-16 22:42:01
【问题描述】:
我需要按联系人 ID 获取联系人的发票,因此我编写了类似于 Qusery 3(用于付款)的查询 1。我的目标是从属于它的关联对象联系人的字段中查询发票。但是查询 1 返回 0 个结果。
然后我尝试了查询发票的方式,通过属于发票的字段进行查询。我指的是 GitHub 中的 Xero C# 代码示例。它正在工作并按预期返回 10 个结果。
为什么我不能从ContactId字段查询属于发票中的联系人?
代码
查询 1(不工作 - 返回 0 个结果,期望 10 个结果)
var contact = _api.Contacts.Find().FirstOrDefault(c => c.AccountNumber == accountNumber);
returnInvoiceList =
_api.Invoices.Find()
.Where(c => c.Contact.Id == contact.Id)
.OrderBy(item => typeof(Invoice).GetProperty(
orderby, BindingFlags.Public | BindingFlags.Instance).GetValue(item))
.Skip(i * x)
.Take(x)
.ToList();
问题 2(工作中)
returnInvoiceList =
_api.Invoices.Where(string.Format("Reference == \"{0}\"", accountNumber)).Find()
.OrderBy(item => typeof(Invoice).GetProperty(
orderby, BindingFlags.Public | BindingFlags.Instance).GetValue(item))
.Skip(i * x)
.Take(x)
.ToList();
QUERY 3(与查询 1 类似的模式查询,用于支付)
returnPaymentList =
_api.Payments.Find()
.Where(c => c.Invoice.Contact.Id == contact.Id)
.OrderBy(item => typeof(Payment).GetProperty(
orderby, BindingFlags.Public | BindingFlags.Instance).GetValue(item))
.Skip(i * x)
.Take(x)
.ToList();
【问题讨论】:
-
如果删除查询中的
Find()会怎样?Where已经成功了 -
不。它给你一个编译错误。当您尝试使用 lambda 表达式时,Xero 需要 Find before Where。当 where 子句为字符串格式时,可以接受 Where("where string").Find()。这些是 api 要求。