我决定快速浏览一下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我自欺欺人了!
提前干杯。
答案 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知道我是否可以添加任何内容或者我是否有任何错误。
干杯,
最高