为什么在LINQ查询中不为空仍然返回空记录

本文关键字:返回 记录 LINQ 查询 为什么 | 更新日期: 2023-09-27 18:03:10

为什么LINQ查询返回空记录?我正在使用下面的代码,但无济于事。

var list = (from t in dal.table
            where t.name != null);

为什么在LINQ查询中不为空仍然返回空记录

你忘了select

var list = (from t in dal.table
            where t.name != null
            select t);

我遇到了同样奇怪的行为。c#代码是

public DbSet<Document> Documents { get; set; }
List<Document> = Documents
    .Where(d => d.BusinessId = 818)
    .Where(d => d.CurrencyId != null)
    .ToList();
但是生成的SQL语句是这样的:
exec sp_executesql N'SELECT 
[Extent1].[DocumentId] AS [DocumentId], 
[Extent1].[DateCreated] AS [DateCreated],
...
FROM [dbo].[Documents] AS [Extent1]
WHERE [Extent1].[BusinessId] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=818    

显然LINQ忽略了。where (d => d. currencyid != null)子句。

我的解决方案如下:

List<Document> = Documents
    .Where(d => d.BusinessId = 818)
    .ToList() // <== Gel all documents and filter in memory
    .Where(d => d.CurrencyId != null)
    .ToList();

注意:从技术上讲,我们将NOT Null过滤器从Linq-To-Sql移动到Linq-To-objects。

非常低效,因为我们选择所有文档到内存中并在那里过滤(而不是在db级过滤)。

在我的情况下,记录的数量通常很少,所以解决方案对我有效。

101 c# LINQ示例:http://msdn.microsoft.com/en-us/vcsharp/aa336746