我有一个IList:在IList中查找项目与LINQ
IList list = CallMyMethodToGetIList();
,我不知道是什么类型,我可以得到它
Type entityType = list[0].GetType();`
我想搜索这个名单与LINQ的东西如:
var itemFind = list.SingleOrDefault(MyCondition....);
谢谢你的帮助。
我有一个IList:在IList中查找项目与LINQ
IList list = CallMyMethodToGetIList();
,我不知道是什么类型,我可以得到它
Type entityType = list[0].GetType();`
我想搜索这个名单与LINQ的东西如:
var itemFind = list.SingleOrDefault(MyCondition....);
谢谢你的帮助。
简单:
IList list = MyIListMethod();
var item = list
.Cast<object>()
.SingleOrDefault(i => i is MyType);
或:
IList list = MyIListMethod();
var item = list
.Cast<object>()
.SingleOrDefault(i => i != null);
希望这有助于!
'OfType
我展示了一个过滤器的例子,不一定是 – 2013-03-07 20:58:26
类型,基本上分别是'foreach(item)yield return(T)item'和'foreach(item)if if(item T)yield return item as T'。 – abatishchev 2013-03-07 21:00:44
由于JakobMöllås说你可以使用动态。至少它工作在LinqPad:
IList list = new List<string>();
list.Add("TEST");
list.Add("NOT");
Console.WriteLine(list.Cast<dynamic>().FirstOrDefault(l => l== "NOT"));
比'dynamic'更有效的解决方案。 – abatishchev 2013-03-07 20:52:53
@abatishchev我同意它不是非常有效,但它支持值类型。 – Silvermind 2013-03-07 21:36:35
IList list = ...
// if all items are of given type
IEnumerable<YourType> seq = list.Cast<YourType>().Where(condition);
// if only some of them
IEnumerable<YourType> seq = list.OfType<YourType>().Where(condition);
由于他使用'list [0] .GetType()'来获取类型,所以我在编译时并不知道类型。我同意你在我的回答中的评论:“dynamic”效率不高,但它支持Linq。 – Silvermind 2013-03-07 21:32:52
如果您不知道类型,您的情况如何? – Lee 2013-03-07 20:43:57
var itemFind = list.Where(i => myCondition(i)).... – 2013-03-07 20:44:23
由于您使用的是非通用'IList',因此您需要添加'.OfType'或'.Cast '在使用其他LINQ方法之前。如果你的项目不属于同一类型,你可以简单地使用'object'作为'T',即''.OfType