如何使用返回的linq变量?

时间:2012-09-18 12:51:57

标签: c# .net linq

我决定快速浏览一下LINQ方面的内容,而不是仅仅使用一个直接的foreach循环,但是我在使用它时遇到了一些麻烦,主要是因为我相信数据类型。 / p>

到目前为止,我已经有了这个;

var selectedSiteType = from sites in siteTypeList
                                   where sites.SiteTypeID == temp
                                   select sites;

siteTypeList是SiteTypes的列表。我试图找到一个特定的(我已经用变量“temp”谴责。

我如何将此选定的SiteType AS用作SiteType?当我尝试将“selectedSiteType”传递给另一个函数时,就像这样;

mSiteTypeSub.EditSitetype(selectedSiteType);

注意:我尝试提供索引,就好像selectedSiteType是一个列表/数组,但是它也没有用,我得到以下错误:

Argument 1: cannot convert from 
'System.Collections.Generic.IEnumerable<DeviceManager_take_2.SiteType>' to 
'DeviceManager_take_2.SiteType' 

我错过了什么吗?也许是某种演员?就像我说我是新手,我正在努力解决这个问题。有可能我的整个概念都错了,bingbangbosh我自欺欺人了!

提前干杯。

3 个答案:

答案 0 :(得分:17)

使用First / FirstOrDefault / Single / SingleOrDefault从集合中获取特定类型的项目。

   var value = selectedSiteType.First(); 
   // returns the first item of the collection

   var value = selectedSiteType.FirstOrDefault(); 
   // returns the first item of the collection or null if none exists

   var value = selectedSiteType.Single(); 
   // returns the only one item of the collection, exception is thrown if more then one exists

   var value = selectedSiteType.SingleOrDefault(); 
   // returns the only item from the collection or null, if none exists. If the collection contains more than one item, an exception is thrown. 

答案 1 :(得分:7)

如果您的退货类型是单一的:

   var selectedSiteType = (from sites in siteTypeList
                                       where sites.SiteTypeID == temp
                                       select sites).SingleOrDefault();

如果列表(可能有多个项目):

 var selectedSiteType = (from sites in siteTypeList
                                       where sites.SiteTypeID == temp
                                       select sites).ToList();

这是您在查询中遗漏的SingleOrDefault / ToList。

答案 2 :(得分:4)

沙恩,

我不会改进之前的答案。他们都是正确的。我将尝试向您解释一下,以便您将来更好地理解它。

当您编写一段代码时会发生什么:

var selectedSiteType = from sites in siteTypeList
                               where sites.SiteTypeID == temp
                               select sites;

您没有将答案放入var(selectedSiteType),而是创建一个表达式树,仅在您实际使用它时(在foreach中,或通过调用其中一个方法(如。 First(),. ToList(),SingleOrDefault()等)。

from语句的默认返回类型是IEnumerable&lt;&gt;,但是如果你调用.First()或.SingleOrDefault()(etc),你将深入了解IEnumerable&lt;&gt;并得到一个特定的项目。

我希望这有助于您更好地了解正在发生的事情。

Lemme知道我是否可以添加任何内容或者我是否有任何错误。

干杯,

最高