2010-01-13 59 views
4

期望记录集(> = 1条记录)时,如何检查0记录情况?实体框架 - ToList()和0记录

例如:

RivWorks.Model.FeedStoreReadOnly store = new RivWorks.Model.FeedStoreReadOnly(AppSettings.FeedAutosEntities_connString, AppSettings.FeedAutosEntities_metadata, AppSettings.FeedAutosEntities_providerName); 
RivWorks.Model.NegotiationAutos.Entities _dbFeed = store.ReadOnlyEntities(); 
var companyDetails = from a in _dbFeed.ClientClientMap where a.CompanyID == CompanyId select a; 
return companyDetails.ToList(); 

当它返回它是在ToList(),因为没有记录是满足WHERE子句示数出来。那么,检查0条记录的正确方法是什么?以及此时建议的回报是多少?


加入下面的答案基于关:

if (companyDetails.Count() > 0) 
    return companyDetails.ToList(); 
else 
{ 
    List<RivWorks.Model.NegotiationAutos.ClientClientMap> ret = new List<RivWorks.Model.NegotiationAutos.ClientClientMap>(); 
    ret.Add(companyDetails.FirstOrDefault()); 
    return ret; 
} 

还没有测试,但该(逻辑)似乎工作。想知道是否有更简单的方法。


注意

我想通弄明白了。 SQL所运行的帐户没有被DBA授予正确的权限集。我们更改了新表/视图上的所有GRANT语句,现在它正在工作。

尽管如此,我仍然不确定什么是正确的答案。我努力创造一个空白(新)记录并添加到列表中,这样我们的球员接受列表有东西扶着显示(为编辑,如果没有别的)...

+0

你确定例外吗?它不应该出错,它应该返回一个包含0条记录的列表。 – 2010-01-13 22:50:02

+0

你得到的例外是什么? – mxmissile 2010-01-13 22:50:54

+0

在内部异常我得到“无效的对象名称'dbo.ClientClientMap'”。我不理解这个错误,因为我可以在模型中看到对象,并且可以很好地引用它。 – 2010-01-13 23:23:54

回答

5

致电ToList之前,您无需检查是否有空。 ToList可正常使用不返回任何记录的查询;它只会返回一个空的列表。你可以使用你的原始代码,并且一切都可以正常工作,无论表中有没有数据。

大多数网格等也可以应付罚款清单;他们通常会为用户显示一个空行以创建第一条记录。

0

ClientClientMap表不是在数据库

+0

au contrair。它的确在数据库中,并且是一个View。我的模型是通过EF向导生成的,我没有为其添加任何其他非数据库派生对象。我遇到了几个绑定到表的对象的问题。 – 2010-01-14 00:08:26

+0

@Keith,也许你的实体模式没有更新,但你的异常与它是一个空的结果无关,要测试这个尝试返回一个结果与行。检查你的连接字符串,确保你指向正确的数据库。 – 2010-01-14 00:50:30

+0

权限(SELECT/UPDATE)没有为在SQL Server中运行请求的帐户设置(请参阅上文)。 – 2010-01-14 05:45:40

0

另一个原因可能是与数据库的连接字符串包含的数据库名称不同于您打算使用的名称。实体框架(如果它被配置有权这样做)只是根据配置的连接字符串创建一个不同的数据库,并且可能会发生您查询的表为空的情况。