2011-11-21 79 views
13

我不确定为什么以下不会为Vend返回值作为字符串。 当我检查鬻的价值,它说:System.Data.Objects.ObjectQuery``1[System.String]Linq返回字符串

 string vend = (from vnd in db.Vendors 
      where vnd.VendorID == id 
      select vnd.VendorName).ToString(); 

当我查看鬻的价值,这是不是我所期待

+0

你在看vend的类型吗? – zmbq

回答

29

您购买的IQueryable<String>回从您查询。你需要第一页或单或东西:

string vend = (from vnd in db.Vendors 
     where vnd.VendorID == id 
     select vnd.VendorName).First().ToString(); 

ToString是不需要如果VendorName是一个字符串。

string vend = db.Vendors.Single(vnd => vnd.VendorID == id); // more terse 

First将抓取集合中的第一条记录,如果集合为空则会抛出异常。

FirstOrDefault会返回第一条记录或预期类型的​​默认值,没有例外。

Single将返回该集合的第一条记录,但是如果集合中有多条记录或集合为空,则会抛出异常。

SingleOrDefault将返回该集合的第一条记录或该类型的默认值(如果为空),但如果该集合中有多条记录,则会抛出异常。

+0

我总是忘记这一点。感谢您的简洁解释! – sparkyShorts

5

您在查询本身上调用ToString(),而不是查询的结果。尝试

string vend = (from vnd in db.Vendors 
where vnd.VendorID == id 
select vnd.VendorName).First(); 

这会得到查询的第一个结果,它应该已经是一个字符串(假定VendorName是一个字符串)。因此,不需要调用ToString()。