using
System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data;
using System.Data.Common;
using System.Web.Script.Serialization;
using System.IO;
using System.Security.Cryptography;
using System.Collections;
using System.Collections.ObjectModel;
namespace Pub.Class {
public static class IEnumerableExtensions {
public static bool IsNullEmpty( this IEnumerable source) {
if (source == null ) return true ;
foreach (var item in source) return false ;
return true ;
}
public static DataTable ToDataTable < T > ( this IEnumerable < T > varlist) {
DataTable dtReturn = new DataTable();
PropertyInfo[] oProps = null ;
if (varlist == null ) return dtReturn;
foreach (T rec in varlist) {
if (oProps == null ) {
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps) {
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof (Nullable <> ))) colType = colType.GetGenericArguments()[ 0 ];
dtReturn.Columns.Add( new DataColumn(pi.Name, colType));
}
}
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps) dr[pi.Name] = pi.GetValue(rec, null ) == null ? DBNull.Value : pi.GetValue(rec, null );
dtReturn.Rows.Add(dr);
}
return dtReturn;
}
public static List < TSource > ToPage < TSource > ( this IEnumerable < TSource > varlist, int pageIndex, int pageSize, out int totalRecords) {
totalRecords = varlist.Count();
return varlist.Skip((pageIndex - 1 ) * pageSize).Take(pageSize).ToList();
}
public static string ToJson < TSource, TResult > ( this IEnumerable < TSource > varlist, Func < TSource, TResult > selector) {
return varlist.Select(selector).ToJson();
}
public static IEnumerable < TTarget > ConvertList < TSource, TTarget > ( this IEnumerable < TSource > source) {
foreach (var value in source) {
yield return value.ConvertTo < TTarget > ();
}
}
public static IEnumerable < T > ForEach < T > ( this IEnumerable < T > source, Action < T > action) {
foreach (T element in source) {
action(element);
yield return element;
}
}
public static IEnumerable < T > ForEach < T > ( this IEnumerable < T > items, Action < T > odd, Action < T > even) {
bool isOdd = true ;
return ForEach(items, item => {
if (isOdd) odd(item); else even(item);
isOdd = ! isOdd;
});
}
public static IEnumerable < T > MergeWith < T > ( this IEnumerable < T > target, params IEnumerable < T > [] data) {
List < T > list = new List < T > ( target );
data.ForEach( array => list.AddRange( array ) );
return list;
}
public static IEnumerable < T > With < T > ( this IEnumerable < T > source, T item) {
foreach (T t in source) yield return t;
yield return item;
}
public static bool ContainsAtLeast < T > ( this IEnumerable < T > enumeration, int count) {
if (enumeration == null ) throw new ArgumentNullException( " enumeration " );
return (from t in enumeration.Take(count) select t).Count() == count;
}
public static IEnumerable < T[] > GroupEvery < T > ( this IEnumerable < T > enumeration, int count) {
if (enumeration == null ) throw new ArgumentNullException( " IEnumerable cannot be null. " );
if (count <= 0 ) throw new ArgumentOutOfRangeException( " The count parameter must be greater than zero. " );
int current = 0 ;
T[] array = new T[count];
foreach (var item in enumeration) {
array[current ++ ] = item;
if (current == count) {
yield return array;
current = 0 ;
array = new T[count];
}
}
if (current != 0 ) yield return array;
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value) where T : IEquatable < T > {
return enumeration.IndexOf < T > (value, EqualityComparer < T > .Default);
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value, IEqualityComparer < T > comparer) {
int index = 0 ;
foreach (var item in enumeration) {
if (comparer.Equals(item, value)) return index;
index ++ ;
}
return - 1 ;
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value, int startIndex) where T : IEquatable < T > {
return enumeration.IndexOf < T > (value, startIndex, EqualityComparer < T > .Default);
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value, int startIndex, IEqualityComparer < T > comparer) {
for ( int i = startIndex; i < enumeration.Count(); i ++ ) {
T item = enumeration.ElementAt(i);
if (comparer.Equals(item, value)) return i;
}
return - 1 ;
}
public static int IndexOfPrevious < T > ( this IEnumerable < T > items, T value, int fromIndex) {
for ( int i = fromIndex - 1 ; i > - 1 ; i -- ) {
T item = items.ElementAt(i);
if (EqualityComparer < T > .Default.Equals(item, value)) return i;
}
return - 1 ;
}
public static bool Contains < T > ( this IEnumerable < T > items, T value) {
if (items == null ) throw new ArgumentNullException( " items " );
ICollection < T > c = items as ICollection < T > ;
if (c != null ) return c.Contains(value);
throw new NotImplementedException();
}
public static T Constructor < T > ( this IEnumerable < object > Parameters, IDictionary < string , object > Properties) where T: class {
Type ttype = typeof (T);
T obj = (T)Activator.CreateInstance( typeof (T), Parameters);
foreach ( string key in Properties.Keys) {
PropertyInfo prop = ttype.GetProperty(key);
if (prop != null ) prop.SetValue(obj, Properties[key], null );
}
return obj;
}
public static IEnumerable < T > Flatten < T > ( this IEnumerable < T > inputs, Func < T, IEnumerable < T >> enumerate) {
if (inputs != null ) {
var stack = new Stack < T > (inputs);
while (stack.Count > 0 ) {
var current = stack.Pop();
if (current == null ) continue ;
yield return current;
var enumerable = enumerate != null ? enumerate(current) : null ;
if (enumerable != null ) {
foreach (var child in enumerable) stack.Push(child);
}
}
}
}
public static IEnumerable Flatten( this IEnumerable inputs, Func < object , System.Collections.IEnumerable > enumerate) {
return Flatten < object > (inputs.Cast < object > (), o => (enumerate(o) ?? new object [ 0 ]).Cast < object > ());
}
public static ReadOnlyCollection < T > AsReadOnly < T > ( this IEnumerable < T > @this) {
return new ReadOnlyCollection < T > ( new List < T > (@this));
}
public static bool In < T > ( this T source, IEnumerable < T > values) where T : IEquatable < T > {
if (values == null ) return false ;
foreach (T listValue in values) {
if (( default (T).Equals(source) && default (T).Equals(listValue)) || ( ! default (T).Equals(source) && source.Equals(listValue))) return true ;
}
return false ;
}
public static IEnumerable < TSource > Do < TSource > ( this IEnumerable < TSource > source, Action < TSource > action) {
foreach (var x in source) action(x);
return source;
}
public static IEnumerable Do( this IEnumerable source, Action < object > action) {
foreach (var x in source) action(x);
return source;
}
public static IEnumerable < TSource > Do < TSource > ( this IEnumerable < TSource > source, Action < TSource, int > action) {
var i = 0 ;
foreach (var x in source) action(x, i ++ );
return source;
}
public static IEnumerable Do( this IEnumerable source, Action < object , int > action) {
var i = 0 ;
foreach (var x in source) action(x, i ++ );
return source;
}
public static IEnumerable < TSource > Concat < TSource > ( this IEnumerator < TSource > left, IEnumerator < TSource > right) {
while (left.MoveNext()) yield return left.Current;
while (right.MoveNext()) yield return right.Current;
}
public static IEnumerable < TSource > Concat < TSource > ( this IEnumerator < TSource > left, TSource last) {
while (left.MoveNext()) yield return left.Current;
yield return last;
}
public static IEnumerable < TSource > Concat < TSource > ( this TSource first, IEnumerator < TSource > right) {
yield return first;
while (right.MoveNext()) yield return right.Current;
}
public static IEnumerable < IEnumerable < T >> Partition < T > ( this IEnumerable < T > source, int size) {
int index = 1 ;
IEnumerable < T > partition = source.Take(size).AsEnumerable();
while (partition.Any()) {
yield return partition;
partition = source.Skip(index ++ * size).Take(size).AsEnumerable();
}
}
public static IEnumerable < T > Slice < T > ( this IEnumerable < T > source, int ? start) { return Slice < T > (source, start, null , null ); }
public static IEnumerable < T > Slice < T > ( this IEnumerable < T > source, int ? start, int ? stop) { return Slice < T > (source, start, stop, null ); }
public static IEnumerable < T > Slice < T > ( this IEnumerable < T > source, int ? start, int ? stop, int ? step) {
if (source == null ) throw new ArgumentNullException( " source " );
if (step == 0 ) throw new ArgumentException( " Step cannot be zero. " , " step " );
IList < T > sourceCollection = source as IList < T > ;
if (sourceCollection == null )
sourceCollection = new List < T > (source);
// nothing to slice
if (sourceCollection.Count == 0 ) yield break ;
// set defaults for null arguments
int stepCount = step ?? 1 ;
int startIndex = start ?? ((stepCount > 0 ) ? 0 : sourceCollection.Count - 1 );
int stopIndex = stop ?? ((stepCount > 0 ) ? sourceCollection.Count : - 1 );
// start from the end of the list if start is negitive
if (start < 0 ) startIndex = sourceCollection.Count + startIndex;
// end from the start of the list if stop is negitive
if (stop < 0 ) stopIndex = sourceCollection.Count + stopIndex;
// ensure indexes keep within collection bounds
startIndex = Math.Max(startIndex, (stepCount > 0 ) ? 0 : int .MinValue);
startIndex = Math.Min(startIndex, (stepCount > 0 ) ? sourceCollection.Count : sourceCollection.Count - 1 );
stopIndex = Math.Max(stopIndex, - 1 );
stopIndex = Math.Min(stopIndex, sourceCollection.Count);
for ( int i = startIndex; (stepCount > 0 ) ? i < stopIndex : i > stopIndex; i += stepCount) yield return sourceCollection[i];
yield break ;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Data;
using System.Data.Common;
using System.Web.Script.Serialization;
using System.IO;
using System.Security.Cryptography;
using System.Collections;
using System.Collections.ObjectModel;
namespace Pub.Class {
public static class IEnumerableExtensions {
public static bool IsNullEmpty( this IEnumerable source) {
if (source == null ) return true ;
foreach (var item in source) return false ;
return true ;
}
public static DataTable ToDataTable < T > ( this IEnumerable < T > varlist) {
DataTable dtReturn = new DataTable();
PropertyInfo[] oProps = null ;
if (varlist == null ) return dtReturn;
foreach (T rec in varlist) {
if (oProps == null ) {
oProps = ((Type)rec.GetType()).GetProperties();
foreach (PropertyInfo pi in oProps) {
Type colType = pi.PropertyType;
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof (Nullable <> ))) colType = colType.GetGenericArguments()[ 0 ];
dtReturn.Columns.Add( new DataColumn(pi.Name, colType));
}
}
DataRow dr = dtReturn.NewRow();
foreach (PropertyInfo pi in oProps) dr[pi.Name] = pi.GetValue(rec, null ) == null ? DBNull.Value : pi.GetValue(rec, null );
dtReturn.Rows.Add(dr);
}
return dtReturn;
}
public static List < TSource > ToPage < TSource > ( this IEnumerable < TSource > varlist, int pageIndex, int pageSize, out int totalRecords) {
totalRecords = varlist.Count();
return varlist.Skip((pageIndex - 1 ) * pageSize).Take(pageSize).ToList();
}
public static string ToJson < TSource, TResult > ( this IEnumerable < TSource > varlist, Func < TSource, TResult > selector) {
return varlist.Select(selector).ToJson();
}
public static IEnumerable < TTarget > ConvertList < TSource, TTarget > ( this IEnumerable < TSource > source) {
foreach (var value in source) {
yield return value.ConvertTo < TTarget > ();
}
}
public static IEnumerable < T > ForEach < T > ( this IEnumerable < T > source, Action < T > action) {
foreach (T element in source) {
action(element);
yield return element;
}
}
public static IEnumerable < T > ForEach < T > ( this IEnumerable < T > items, Action < T > odd, Action < T > even) {
bool isOdd = true ;
return ForEach(items, item => {
if (isOdd) odd(item); else even(item);
isOdd = ! isOdd;
});
}
public static IEnumerable < T > MergeWith < T > ( this IEnumerable < T > target, params IEnumerable < T > [] data) {
List < T > list = new List < T > ( target );
data.ForEach( array => list.AddRange( array ) );
return list;
}
public static IEnumerable < T > With < T > ( this IEnumerable < T > source, T item) {
foreach (T t in source) yield return t;
yield return item;
}
public static bool ContainsAtLeast < T > ( this IEnumerable < T > enumeration, int count) {
if (enumeration == null ) throw new ArgumentNullException( " enumeration " );
return (from t in enumeration.Take(count) select t).Count() == count;
}
public static IEnumerable < T[] > GroupEvery < T > ( this IEnumerable < T > enumeration, int count) {
if (enumeration == null ) throw new ArgumentNullException( " IEnumerable cannot be null. " );
if (count <= 0 ) throw new ArgumentOutOfRangeException( " The count parameter must be greater than zero. " );
int current = 0 ;
T[] array = new T[count];
foreach (var item in enumeration) {
array[current ++ ] = item;
if (current == count) {
yield return array;
current = 0 ;
array = new T[count];
}
}
if (current != 0 ) yield return array;
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value) where T : IEquatable < T > {
return enumeration.IndexOf < T > (value, EqualityComparer < T > .Default);
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value, IEqualityComparer < T > comparer) {
int index = 0 ;
foreach (var item in enumeration) {
if (comparer.Equals(item, value)) return index;
index ++ ;
}
return - 1 ;
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value, int startIndex) where T : IEquatable < T > {
return enumeration.IndexOf < T > (value, startIndex, EqualityComparer < T > .Default);
}
public static int IndexOf < T > ( this IEnumerable < T > enumeration, T value, int startIndex, IEqualityComparer < T > comparer) {
for ( int i = startIndex; i < enumeration.Count(); i ++ ) {
T item = enumeration.ElementAt(i);
if (comparer.Equals(item, value)) return i;
}
return - 1 ;
}
public static int IndexOfPrevious < T > ( this IEnumerable < T > items, T value, int fromIndex) {
for ( int i = fromIndex - 1 ; i > - 1 ; i -- ) {
T item = items.ElementAt(i);
if (EqualityComparer < T > .Default.Equals(item, value)) return i;
}
return - 1 ;
}
public static bool Contains < T > ( this IEnumerable < T > items, T value) {
if (items == null ) throw new ArgumentNullException( " items " );
ICollection < T > c = items as ICollection < T > ;
if (c != null ) return c.Contains(value);
throw new NotImplementedException();
}
public static T Constructor < T > ( this IEnumerable < object > Parameters, IDictionary < string , object > Properties) where T: class {
Type ttype = typeof (T);
T obj = (T)Activator.CreateInstance( typeof (T), Parameters);
foreach ( string key in Properties.Keys) {
PropertyInfo prop = ttype.GetProperty(key);
if (prop != null ) prop.SetValue(obj, Properties[key], null );
}
return obj;
}
public static IEnumerable < T > Flatten < T > ( this IEnumerable < T > inputs, Func < T, IEnumerable < T >> enumerate) {
if (inputs != null ) {
var stack = new Stack < T > (inputs);
while (stack.Count > 0 ) {
var current = stack.Pop();
if (current == null ) continue ;
yield return current;
var enumerable = enumerate != null ? enumerate(current) : null ;
if (enumerable != null ) {
foreach (var child in enumerable) stack.Push(child);
}
}
}
}
public static IEnumerable Flatten( this IEnumerable inputs, Func < object , System.Collections.IEnumerable > enumerate) {
return Flatten < object > (inputs.Cast < object > (), o => (enumerate(o) ?? new object [ 0 ]).Cast < object > ());
}
public static ReadOnlyCollection < T > AsReadOnly < T > ( this IEnumerable < T > @this) {
return new ReadOnlyCollection < T > ( new List < T > (@this));
}
public static bool In < T > ( this T source, IEnumerable < T > values) where T : IEquatable < T > {
if (values == null ) return false ;
foreach (T listValue in values) {
if (( default (T).Equals(source) && default (T).Equals(listValue)) || ( ! default (T).Equals(source) && source.Equals(listValue))) return true ;
}
return false ;
}
public static IEnumerable < TSource > Do < TSource > ( this IEnumerable < TSource > source, Action < TSource > action) {
foreach (var x in source) action(x);
return source;
}
public static IEnumerable Do( this IEnumerable source, Action < object > action) {
foreach (var x in source) action(x);
return source;
}
public static IEnumerable < TSource > Do < TSource > ( this IEnumerable < TSource > source, Action < TSource, int > action) {
var i = 0 ;
foreach (var x in source) action(x, i ++ );
return source;
}
public static IEnumerable Do( this IEnumerable source, Action < object , int > action) {
var i = 0 ;
foreach (var x in source) action(x, i ++ );
return source;
}
public static IEnumerable < TSource > Concat < TSource > ( this IEnumerator < TSource > left, IEnumerator < TSource > right) {
while (left.MoveNext()) yield return left.Current;
while (right.MoveNext()) yield return right.Current;
}
public static IEnumerable < TSource > Concat < TSource > ( this IEnumerator < TSource > left, TSource last) {
while (left.MoveNext()) yield return left.Current;
yield return last;
}
public static IEnumerable < TSource > Concat < TSource > ( this TSource first, IEnumerator < TSource > right) {
yield return first;
while (right.MoveNext()) yield return right.Current;
}
public static IEnumerable < IEnumerable < T >> Partition < T > ( this IEnumerable < T > source, int size) {
int index = 1 ;
IEnumerable < T > partition = source.Take(size).AsEnumerable();
while (partition.Any()) {
yield return partition;
partition = source.Skip(index ++ * size).Take(size).AsEnumerable();
}
}
public static IEnumerable < T > Slice < T > ( this IEnumerable < T > source, int ? start) { return Slice < T > (source, start, null , null ); }
public static IEnumerable < T > Slice < T > ( this IEnumerable < T > source, int ? start, int ? stop) { return Slice < T > (source, start, stop, null ); }
public static IEnumerable < T > Slice < T > ( this IEnumerable < T > source, int ? start, int ? stop, int ? step) {
if (source == null ) throw new ArgumentNullException( " source " );
if (step == 0 ) throw new ArgumentException( " Step cannot be zero. " , " step " );
IList < T > sourceCollection = source as IList < T > ;
if (sourceCollection == null )
sourceCollection = new List < T > (source);
// nothing to slice
if (sourceCollection.Count == 0 ) yield break ;
// set defaults for null arguments
int stepCount = step ?? 1 ;
int startIndex = start ?? ((stepCount > 0 ) ? 0 : sourceCollection.Count - 1 );
int stopIndex = stop ?? ((stepCount > 0 ) ? sourceCollection.Count : - 1 );
// start from the end of the list if start is negitive
if (start < 0 ) startIndex = sourceCollection.Count + startIndex;
// end from the start of the list if stop is negitive
if (stop < 0 ) stopIndex = sourceCollection.Count + stopIndex;
// ensure indexes keep within collection bounds
startIndex = Math.Max(startIndex, (stepCount > 0 ) ? 0 : int .MinValue);
startIndex = Math.Min(startIndex, (stepCount > 0 ) ? sourceCollection.Count : sourceCollection.Count - 1 );
stopIndex = Math.Max(stopIndex, - 1 );
stopIndex = Math.Min(stopIndex, sourceCollection.Count);
for ( int i = startIndex; (stepCount > 0 ) ? i < stopIndex : i > stopIndex; i += stepCount) yield return sourceCollection[i];
yield break ;
}
}
}
ToJson调用实例:
private
void
loadlp(){
IList < LP_Task > list = LP_TaskFactory.Instance().SelectListByCustomerID(Customer.CustomerID.Value, "" , "" , "" , true ).Where(p => p.JobID == CurrentUser.Job && p.Status == 1 ).OrderByDescending(p => p.Quarter).ToList();
string data = list.ToJson(p => new {
id = p.TaskID,
title = p.TaskName,
text = p.Intro,
quarter = p.Quarter,
abilitys = LP_TaskAbilityFactory.Instance().SelectListByTaskID(p.TaskID.Value, "" , "" , "" , true ).Select(z => new {
id = z.AbilityID,
level = z.LPLevel,
info = LP_AbilityFactory.Instance().SelectListByCustomerID(CurrentUser.CustomerID.Value, "" , "" , "" , true )
.Where(y => y.AbilityID == z.AbilityID).ToList()
.Select(y => new { y.Ability, LevelText = (z.LPLevel == 1 ? y.Level1Intro : z.LPLevel == 2 ? y.Level2Intro : y.Level3Intro) }).FirstOrDefault()
}),
nodes = LP_TaskDetailFactory.Instance().SelectListByTaskID(p.TaskID.Value, "" , "" , "" , true ).Select(d => new { d.DetailMonths, d.DetailName, d.DetailType, d.DetailIntro, d.Days })
});
Msg.WriteEnd(data);
}
IList < LP_Task > list = LP_TaskFactory.Instance().SelectListByCustomerID(Customer.CustomerID.Value, "" , "" , "" , true ).Where(p => p.JobID == CurrentUser.Job && p.Status == 1 ).OrderByDescending(p => p.Quarter).ToList();
string data = list.ToJson(p => new {
id = p.TaskID,
title = p.TaskName,
text = p.Intro,
quarter = p.Quarter,
abilitys = LP_TaskAbilityFactory.Instance().SelectListByTaskID(p.TaskID.Value, "" , "" , "" , true ).Select(z => new {
id = z.AbilityID,
level = z.LPLevel,
info = LP_AbilityFactory.Instance().SelectListByCustomerID(CurrentUser.CustomerID.Value, "" , "" , "" , true )
.Where(y => y.AbilityID == z.AbilityID).ToList()
.Select(y => new { y.Ability, LevelText = (z.LPLevel == 1 ? y.Level1Intro : z.LPLevel == 2 ? y.Level2Intro : y.Level3Intro) }).FirstOrDefault()
}),
nodes = LP_TaskDetailFactory.Instance().SelectListByTaskID(p.TaskID.Value, "" , "" , "" , true ).Select(d => new { d.DetailMonths, d.DetailName, d.DetailType, d.DetailIntro, d.Days })
});
Msg.WriteEnd(data);
}
linq 递归
public
IEnumerable GetCourseSeriesTree3(
int
parentID) {
IList < CC_CourseSeries > list = CC_CourseSeriesFactory.Instance().SelectCourseSeriesListByCustomerID(( int )CurrentUser.CustomerID, true );
var list2 = list.Where(p => p.ParentID == parentID).Select(p => new {
id = p.SeriesID,
name = p.SeriesName.UnHtml(),
node = GetCourseSeriesTree3(( int )p.SeriesID)
});
return list2;
}
public IEnumerable GetCourseSeriesTree( int parentID) {
IList < CC_CourseSeries > list = CC_CourseSeriesFactory.Instance().SelectCourseSeriesListByCustomerID(( int )CurrentUser.CustomerID, true );
return FuncExtensions.Fix < int , IEnumerable > (f => p => {
var list2 = list.Where(o => o.ParentID == p).Select(o => new {
id = o.SeriesID,
name = o.SeriesName.UnHtml(),
node = f(( int )o.SeriesID)
});
return list2;
})(parentID);
}
IList < CC_CourseSeries > list = CC_CourseSeriesFactory.Instance().SelectCourseSeriesListByCustomerID(( int )CurrentUser.CustomerID, true );
var list2 = list.Where(p => p.ParentID == parentID).Select(p => new {
id = p.SeriesID,
name = p.SeriesName.UnHtml(),
node = GetCourseSeriesTree3(( int )p.SeriesID)
});
return list2;
}
public IEnumerable GetCourseSeriesTree( int parentID) {
IList < CC_CourseSeries > list = CC_CourseSeriesFactory.Instance().SelectCourseSeriesListByCustomerID(( int )CurrentUser.CustomerID, true );
return FuncExtensions.Fix < int , IEnumerable > (f => p => {
var list2 = list.Where(o => o.ParentID == p).Select(o => new {
id = o.SeriesID,
name = o.SeriesName.UnHtml(),
node = f(( int )o.SeriesID)
});
return list2;
})(parentID);
}