7

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

所以到目前为止,我已经得到了这个;

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

siteTypeList 是 SiteType 的列表。我正在尝试找到一个特定的(我已经用变量“temp”谴责了它。

然后我如何使用这个选定的站点类型作为站点类型?当我尝试将“selectedSiteType”传递给另一个函数时,就像这样;

mSiteTypeSub.EditSitetype(selectedSiteType);

注意:我尝试提供索引,好像 selectedSiteType 是一个列表/数组,但这也不起作用,我收到以下错误:

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

我错过了什么吗?也许是某种类型的演员?就像我说的那样,我对此很陌生,并且正在努力解决这个问题。很有可能我把整个概念都弄错了,而且 bingbangbosh 我自欺欺人了!

提前喝彩。

4

3 回答 3

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. 
于 2012-09-18T12:53:52.157 回答
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 。

于 2012-09-18T12:53:08.070 回答
4

谢恩,

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

当您编写如下代码时会发生什么:

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

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

from 语句的默认返回类型是 IEnumerable<>,但如果您调用 .First() 或 .SingleOrDefault() (等),您将深入了解该 IEnumerable<> 并获取特定项目。

我希望这可以帮助您更好地了解正在发生的事情。

让我知道我是否可以添加任何内容,或者我是否有任何问题。

干杯,

最大限度

于 2012-09-18T13:12:41.223 回答