2009-05-04 19 views
9

特定の(Blobs)表からわずかな列しか選択しません。 Id、RowVersion、Size、Signature、Blobのようなフィールドがあり、最初の4つだけを選択したい。私はこのようにそれを行う: - (allBlobs)VS.08は匿名型から変換する方法を知っていないと私はBlobDetailsを返すようにしようとしていたときに選択した指定された列を返す

public List<BlobDetails> GetAllBlobsNames() 
{ 
    RichTekstModelDataContext dc = new RichTekstModelDataContext(); 

    var allBlobs = from b in dc.Blobs 
       orderby b.RowVersion descending 
       select new {b.Id, b.Size, b.Signature, b.RowVersion}; 

---> allBlobs.ToList<BlobDetails>(); 
} 

public class BlobDetails 
{ 
    public int Id { get; set; } 
    public string Signature { get; set; } 
    public int Size { get; set; } 
    public System.Data.Linq.Binary RowVersion { get; set; }  
} 

エラーがoccures(--->エラーの場所です)リストに。

すべての値を選択したくないのは、Blobフィールドが非常に重く、常に送信したくないからです。

正しく行う方法はありますか?

答えて

9

BlobDetails場合は、直接それを行うことができます。しかし

var qry = from b in dc.Blobs 
      orderby b.RowVersion descending 
      select new BlobDetails { 
       Id = b.Id, Size = b.Size, 
       Signature = b.Signature, RowVersion = b.RowVersion}; 

return qry.ToList(); 

。それがうまくなって、

var qry = from b in dc.Blobs 
      orderby b.RowVersion descending 
      select new {b.Id, b.Size, b.Signature, b.RowVersion}; 

var typedQry = from b in qry.AsEnumerable() 
       select new BlobDetails { 
        Id = b.Id, Size = b.Size, 
        Signature = b.Signature, RowVersion = b.RowVersion}; 
return typedQry.ToList(); 

AsEnumerable休憩LINQ組成:BlobDetailsは、LINQのエンティティであれば、あなたはsubtrefugeを使用する必要があります。

5

"select new {"を使用すると、暗黙的にBlobDetailsにキャストできない匿名型が作成されます。代わりに、明示的に選択範囲内NEWINGある型を宣言:は、LINQのエンティティではありません

var allBlobs = from b in dc.Blobs 
      orderby b.RowVersion descending 
      select new BlobDetails {Id = b.Id, .... }; 
allBlobs.ToList(); 
+0

ありがとうございます。これを行うには、IEnumerableインターフェイスをBlobDetailsクラスに実装する必要があります。私はそれを行うことができると思う;-) –

+0

いいえ、IEnumerableを実装する必要はありません。私はサンプルを拡張しましたが、あなたは@Marcsサンプルからすでにそれを分かったと思います。 –

+0

はい私はやった:-)ありがとう。 –

関連する問題