1

我在下面这样做-有更好的方法吗?将一个列表转换为另一个列表而不创建新对象?

DataContext c = new DataContext();
List<X> x=
context.X.Where(a => a.date>Datetime.Now>).ToList();            
        foreach(var a in x)
        {
            Y y= new Y();
            y.Name= a.Name;                
            c.Ys.InsertOnSubmit(y);
        }

        c.SubmitChanges();   
4

3 回答 3

3

你可以试试:

var ys = context.X
                .Where(x => x.date > DateTime.Now)
                .Select(x => new Y { Name = x.Name });

c.Ys.InsertAllOnSubmit(ys);
于 2012-04-12T16:00:33.250 回答
0

不知道缩短多少会使它变得更好。也许这会有所帮助:

您投射到一个列表中,Y因此您不必Y在循环中创建新的。

List<Y> list_of_ys =
context.X.Where(a => a.date>Datetime.Now)
         .Select(s => new Y(){Name=s.Name})
         .ToList()

foreach(var y in list_of_ys)
{        
   c.Ys.InsertOnSubmit(y);
}
于 2012-04-12T16:00:11.490 回答
0
public IList<IPoint> Points
{
    get
    {
        return points.ConvertAll<IPoint>(
            delegate(RandomPoint point)
            {
                return point;
            });
    }   

}

例如,如果您有一个接口及其实现,那么您可以使用上面示例中的 ConvertAll 方法,其中 IPoint 是一个接口,而 RandomPoint 是一个派生自该接口的类。

于 2012-04-12T17:43:26.303 回答