将linq模型转换为通用列表

时间:2010-10-12 11:37:44

标签: c# linq linq-to-sql generics

我有一个现有的类Image,在我的应用程序中广泛使用。 我需要将一个通用的图像列表(List)返回到前端,但由于3ed方DB中没有存储过程,我正在查询,我需要使用Linq to Sql。

我在DAL中创建了一个我正在查询的数据库的dbtm文件,如下所示:

ImageCat
    ImageId
    Name
    Width
    DateModified
    Height
    CatId

My Image类如下

public class Image
{
 public int Id { get; set; }
 public string Name { get; set; }
 public int Width { get; set; }
 public int Height { get; set; }
}

我的Linq to Sql如下:

var imageList = (from ic in db.ImageCats
   where ic.CatID.Contains(category)
 select ic).ToList();

var finalImageList = new List<Image>();
foreach (ImageCat ic in imageList)
{
 Image image = new Image();
 image.Id= ic.ImageID;
 image.Height = (int)ic.Height;
 image.Name = ic.Name;
 image.Width = (int)ic.Width;

 finalImageList.Add(image);   
}

我不想通过linq循环到Sql结果来设置我的List。有没有更简单的方法。什么是最佳做法?我不喜欢将我的dbml类暴露给表示层。

3 个答案:

答案 0 :(得分:5)

您可以直接在LINQ查询中选择Image

var imageList = (
    from ic in db.ImageCats
    where ic.CatID.Contains(category)
    select new Image()
    {
         Id= ic.ImageID,
         Height = (int)ic.Height,
         Name = ic.Name,
         Width = (int)ic.Width,
    }
).ToList();

答案 1 :(得分:0)

你可以这样做:

var imageList = db.ImageCats.Where(ic => ic.CatID.Contains(category))
.Select(ic => new Image{ Id = ic.ImageID, 
                         Height = (int)ic.Height, 
                         Name = ic.Name, 
                         Width = (int)ic.Width})
.ToList(); 

答案 2 :(得分:-1)

IEnumerable<Image> = from ic in db.ImageCats
                     where ic.CatID.Contains(category)
                     select new Image() { Id= ic.ImageID, Height = (int)ic.Height, Name = ic.Name, Width = (int)ic.Width }.ToList();

我认为沿着这些线的某些东西会给你一个填充了Image对象的IEnumerable。我在编辑窗口中写道,所以我可能会离开。尝试一下,让我知道它是否适合你。