为什么在LINQ查询中不为空仍然返回空记录
本文关键字:返回 记录 LINQ 查询 为什么 | 更新日期: 2023-09-27 18:03:10
为什么LINQ查询返回空记录?我正在使用下面的代码,但无济于事。
var list = (from t in dal.table
where t.name != null);
你忘了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