編輯:我沒有注意到的break;
前
如果有可能不止一種類型與相關ID,那麼就需要使用FirstOrDefault
按Keith's answer或我的第二個代碼示例如下。
編輯:刪除「多從」版本,因爲它是不必要的低效率假設相等/散列碼適用於任何類型的type.Id
是。
聯接可能是更合適不過:
var query = from s in vars
join type in statusList on s equals type.Id
select new NameValuePair(type.Id, type.Text);
foreach (var pair in query)
{
Add(pair);
}
你可能想作出AddRange
方法,它需要一個IEnumerable<NameValuePair>
此時你可以只調用AddRange(query)
。
或者,您可以使用LookUp。該版本確保每個「s」只添加一種類型。
var lookup = types.ToLookup(type => type.Id);
foreach (var s in vars)
{
var types = lookup[s];
if (types != null)
{
var type = types.First(); // Guaranteed to be at least one entry
Add(new NameValuePair(type.Id, type.Text));
}
}
這樣做的好處是它基本上只通過一次類型列表來建立字典。
打我太它:-) – 2009-02-26 09:16:18
我看不出如何編譯 - 你在第三行使用「type」將不起作用,因爲變量沒有在任何地方聲明。 「Any」調用中的lambda表達式不會保留。 – 2009-02-26 09:28:54
喬恩,感謝您的注意!我仍然想知道我是如何犯這個愚蠢的錯誤。 – 2009-02-26 09:43:40