Ответ 1
Вы забыли select
.
var list = (from t in dal.table
where t.name != null
select t);
Каким будет правильный синтаксис в 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);
101 С# LINQ Примеры: http://msdn.microsoft.com/en-us/vcsharp/aa336746
Я столкнулся с тем же странным поведением. Код С#
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).
В моем случае количество записей обычно невелико, поэтому решение для меня работало.