LINQ 查询结果中的奇怪值

Posted

技术标签:

【中文标题】LINQ 查询结果中的奇怪值【英文标题】:Strange value in LINQ query result 【发布时间】:2020-05-11 12:28:14 【问题描述】:

在报告页面上的应用程序中,我有多个过滤器(开始日期、结束日期、付款类型...等),我想根据用户选择生成查询,如下所示:

private void btnSearch_Click(object sender, RoutedEventArgs e)
    
        if (cboPaymentType.SelectedItem != null)
            _selectedPaymentId = ((PaymentType)cboPaymentType.SelectedItem).id;

        _dateFrom = dpInvoiceFrom.SelectedDate;
        _dateTo = dpInvoiceTo.SelectedDate;

        IQueryable<invoice> invoicesQuery = _context.invoices;

        if (_selectedPaymentId != 0)
            invoicesQuery = invoicesQuery.Where(s => s.payment_id == _selectedPaymentId);

        if (_dateFrom != null)
            invoicesQuery = invoicesQuery.Where(s => s.invoice_date >= _dateFrom);

        if (_dateTo != null)
            invoicesQuery = invoicesQuery.Where(s => s.invoice_date <= _dateTo);

        ocInvoices = new ObservableCollection<invoice>(invoicesQuery);
    

结果总是什么都没有!!,当我检查查询结果时,我在 WHERE 子句中发现了奇怪的值@p__linq__0

WHERE ([Extent1].[invoice_date] >= @p__linq__0)

我的错误是什么?

【问题讨论】:

那是一个变量名,没什么奇怪的。您的 C# 变量 _dateFrom 在 SQL 中称为 @p__linq__0。这很正常。在没有看到您的数据的情况下,没有人可以检查是否有任何记录符合您的搜索条件。 【参考方案1】:

即使它不应该有所作为,您可能希望在传递给构造函数之前先实现查询。

ocInvoices = new ObservableCollection<invoice>(invoicesQuery.AsEnumerable());

ocInvoices = new ObservableCollection<invoice>(invoicesQuery.ToList());

根据一个奇怪的值@p__linq__0。它是查询参数,是生成的 SQL 查询的一部分。

DECLARE @p__linq__0 datetime = value from local variable;

SELECT
    ...
FROM ...
WHERE ([Extent1].[invoice_date] >= @p__linq__0)

一般来说,问题可能是您没有满足条件的行,因此您得到空结果。

【讨论】:

以上是关于LINQ 查询结果中的奇怪值的主要内容,如果未能解决你的问题,请参考以下文章

循环 LINQ 查询并将结果附加到 DataTable

LINQ to SQL查询的结果值有误

未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确

根据 SessionID 随机播放 LINQ 查询的结果

Linq 的奇怪行为

LINQ to XML 查询不返回任何结果