2011-09-14 15 views
4

私はこの権利について検討していますか分かりません。私はLINQクエリから戻ってくる項目をいくつか選択しようとしています。最終的にはほとんどの情報を取り戻したいと思うでしょうが、フィールドのいくつかはFK IDですので、他のテーブルから名前の値を取得する必要があります。Generic.List <AnonymousType#1>をGeneric.Listに変換できません<BillEF.Bill>

私が今行っている問題は、匿名から請求書へのリストの変換です。これをどうやって回避するのですか?

public class BillDO 
{ 
    /// <summary> 
    /// Returns all user bills based on their UserName 
    /// </summary> 
    /// <param name="UserName"></param> 
    /// <returns></returns> 
    public List<Bill> GetBills(string UserName) 
    { 
     BillsEntities be = new BillsEntities(); 

     var q = from b in be.Bills 
       where b.UserName == UserName 
       orderby b.DueDate 
       select new { b.DueDate, b.Name, b.PaymentAmount, b.URL }; 

     List<Bill> billList = q.ToList(); 

     return billList; 
    } 
} 

答えて

8

我々が本当に確実に伝えることはできませんが、私は容疑者は、あなたができる:つまり

var q = from b in be.Bills 
     where b.UserName == UserName 
     orderby b.DueDate 
     select new { b.DueDate, b.Name, b.PaymentAmount, b.URL }; 

return q.AsEnumerable() 
     .Select(b => new Bill { DueDate = b.DueDate, 
           Name = b.Name, 
           PaymentAmount = b.PaymentAmount, 
           URL = b.URL }) 
     .ToList(); 

を、匿名型などのデータベースからデータを引き出したが、その後戻ります関連プロパティがコピーされた「手動で作成されたエンティティ」のリスト。

1

@ジョンスキートは私たちがBillのように見えるが、あなたが必要とするこの作品を作るために、文脈から行くかわからない、言ったように:

public List<Bill> GetBills(string UserName) 
{ 
    BillsEntities be = new BillsEntities(); 

    return new List<Bill>(from b in be.Bills 
      where b.UserName == UserName 
      orderby b.DueDate 
      select new Bill { 
       DueDate = b.DueDate, 
       Name = b.Name, 
       PaymentAmount = b.PaymentAmount, 
       Url = b.URL 
      }); 
} 

このプロパティは、あなたが正確なミラーを選択することを前提としていあなたのBillクラスのプロパティとnull参照例外または不正なコンストラクタ引数がないことを確認します。

+0

新しいBillを選択する項目{...}は、Billのすべてのプロパティではありません。私はエンティティフレームワークには新しいので、私はどのように私はオブジェクトを動かすことになっているのか分からない。 – kyle

+0

@kyle: 'List 'が特に必要な場合を除いて、あなたは本当にIQueryable版のEF "テーブル"を使用する必要があります。リストは実際にはより多くの作業を作成します。 –

関連する問題