(我在括号中加上“...... to Entities”,因为我不知道这是否重要。我想这是一个非常普遍的LINQ相关问题。)
如果数据库中存在对象,我想检查LINQ(实体)。目前我正在做以下事情:
using (MyEntitiesContext aCtx = new MyEntitiesContext())
{
var aQuery = from c
in aCtx.Client
where c.ClientID==1
select c;
Client aClient = aQuery.FirstOrDefault();
bool Exists = (aClient!=null);
...
}
但是(如果我没有错)这将从数据库加载完整的Client对象(如果客户端存在)。我实际上只是在没有加载对象的情况下感兴趣它是否存在。
SQL具有SELECT COUNT(*)...
构造。我能用LINQ做些类似的东西吗?
感谢您的建议!
答案 0 :(得分:7)
一种选择是使用IQueryable的Any方法。它将返回一个布尔值,指示是否找到与指定条件匹配的对象。
using (MyEntitiesContext aCtx = new MyEntitiesContext())
{
bool exists = (from c
in aCtx.Client
where c.ClientID==1
select c).Any();
}
此方法在评估为true时也会停止运行。
答案 1 :(得分:2)
Any()
来确定存在。无论您是否创建如下所示的虚拟实例,编译器都将使用Exists函数创建一个SQL语句,因此,Select语句中的内容无关紧要。
var query= from c
in context.Client
where c.ClientID == 1
select new { Dummy = "foo" };
var exists = query.Any();
答案 2 :(得分:0)
你可以试试......
using (MyEntitiesContext aCtx = new MyEntitiesContext())
{
var aQuery = from c
in aCtx.Client
where c.ClientID==1
select c;
int total = aQuery.Count();
bool Exists = (total > 0);
...
}
未经测试......
答案 3 :(得分:0)
您可以在查询中使用Count()运算符或Any运算符来检查它是否会返回结果:
using (MyEntitiesContext aCtx = new MyEntitiesContext())
{
var aQuery = from c
in aCtx.Client
where c.ClientID==1
select c;
int count = aQuery.Count();
bool Exists = (count > 0);
// or
Exists = aQuery.Any();
...
}