2012-03-23 132 views
1
   string popUpHTML=""; 

       var xx = from Temp in TemplateList 
           where 
           (
           Temp.TitleID == titleID 
           ) 
           select Temp.HTML; 

       foreach (var s in xx) 
       { 
        popUpHTML = s.ToString(); 
       } 

上面的代码正在工作。执行的linq应该只返回一个值。有什么办法可以在没有foreach循环的情况下获得上述LINQ的结果。 (对不起,我是LINQ的新手)。Linq没有foreach?

更新:titleID是数据库中的唯一键,因此只有一个结果是预期的。

+0

use'FirstOrDefault' – 2012-03-23 14:55:59

+2

当你说只返回一个值时,你的意思是第一个值还是最后一个?因为您发布的代码会将popUpHTML设置为最后一个值。 – Brandon 2012-03-23 14:58:13

回答

8

现在您的查询返回的IEnumerable,而是使用FirstOrDefault()(或Single()如果你是绝对相信,时时会出现正好一个结果):

var popUpHTML = (from Temp in TemplateList 
        where Temp.TitleID == titleID 
        select Temp.HTML).FirstOrDefault(); 
+0

一个非常简单直接的答案。谢谢:) – developer747 2012-03-23 15:01:16

0
var xx = (from Temp in TemplateList 
       where 
       (
       Temp.TitleID == titleID 
       ) 
       select Temp.HTML).Take(1); 
+3

您仍然需要在这里调用FirstOrDefault(或First或Single)。 – 2012-03-23 14:58:35

2
string popUpHTML = 
    (
    from Temp in TemplateList 
    where (Temp.TitleID == titleID) 
    select Temp.HTML 
    ) 
    .FirstOrDefault(); 
4
var popUpHTML = TemplateList.Where(temp => temp.TitleID == titleID) 
          .Select(temp => temp.HTML) 
          .SingleOrDefault(); 

popUpHtmlnull如果不存在具有所提供的ID的项目。

+0

这将选择一个'Template'项目,但不是它的HTML属性,这是OP想要的 – BrokenGlass 2012-03-23 16:05:32

0
var popUpHTML = TemplateList.FirstOrDefault(Temp => Temp.TitleID == titleID);