实体框架 - ToList()和0记录

时间:2010-01-13 22:42:58

标签: c# .net entity-framework

当期待记录集(> = 1记录)时,如何检查该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;
}

尚未测试,但(逻辑上)似乎有效。想知道是否有更简单的方法。


注意

我明白了。 DB运行的SQL帐户未被DBA授予正确的权限集。我们修改了新表/视图上的所有GRANT语句,现在它正在运行。

我仍然不确定正确答案是什么。我倾向于创建一个空白(新)记录并添加到列表中,以便我们接收列表的人有一些东西可以显示(如果没有别的话可以编辑)......

3 个答案:

答案 0 :(得分:6)

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

大多数网格等也可以处理空列表;它们通常会显示一个空行,供用户创建第一条记录。

答案 1 :(得分:0)

ClientClientMap表不在数据库中

答案 2 :(得分:0)

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