在这样的代码中,用于根据条件检查对象是否存在, 如何在检查计数后处理查询集合。
var query = from p in someContext
where (p.Name == Name && p.Status == true)
select p;
if (query.Count() > 0)
return true;
else
return false;
这是一个简单的场景,但可能存在查询可能导致巨大集合的情况。 所以我的问题是在需要检查对象是否存在的情况下,怎么做 写入此查询,以便在完成计数检查后结果集合不在内存中。
问候。
答案 0 :(得分:2)
LINQ扩展方法.Count()
实际执行的操作取决于所使用的查询提供程序。对于实体框架(假设您正在使用的内容),将生成一个SQL查询,该查询将返回记录计数,而不是记录本身。因此,您无需担心处理大型集合。
示例代码:
class Program
{
static void Main( string[] args )
{
using( var db = new TestContext() )
{
db.Database.Log += Console.WriteLine;
var query = from mfg in db.Manufacturers
where mfg.Name.Contains( "Inc." )
select mfg;
var count = query.Count();
}
Console.ReadLine();
}
}
生成SQL:
select
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].Manufacturers] AS [Extent1]
WHERE [Extent1].[Name] LIKE N'%Inc.%'
) AS [GroupBy1]