1

メインコード:

    DomainServiceAccountManager d = new DomainServiceAccountManager();
    EntityQuery<ListBuy> q = d.GetListMemberBuyQuery();
    LoadOperation<ListBuy> l = d.Load(q);
    DGListBuy.ItemsSource = l.Entities;

コード:

public IQueryable<ListBuy> GetListMemberBuy()
{
    var membuy =
    from mem in this.ObjectContext.Members
    from b in this.ObjectContext.Buys.Where(b => b.ID_member == mem.ID)
    .OrderByDescending(b => b.ID)
    .DefaultIfEmpty()
    select new { b.ID, mem.Name, b.Money, b.Tarikh };
    return membuy;
}

次のメッセージが表示されます。

Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<AccountManager.Web.ListBuy>'. An explicit conversion exists (are you missing a cast?)

4

1 に答える 1

1

GetListMemberBuyメソッドは、実際には、ListBuy型のIQueryableではなく、匿名型のIQueryableを返します。これらは同一ではないため、(コンパイル時?)エラーが発生します。

ListBuyもデータベースに存在すると想定できますが、存在する場合は、匿名タイプを削除できます。

public IQueryable<ListBuy> GetListMemberBuy()
{
    var membuy =
    from mem in this.ObjectContext.Members
    from b in this.ObjectContext.Buys.Where(b => b.ID_member == mem.ID)
    .OrderByDescending(b => b.ID)
    .DefaultIfEmpty()
    select new ListBuy() { ID = b.ID, Name = mem.Name, Money = b.Money, Tarikh = b.Tarikh }; // <-- new ListBuy() !!
    return membuy;
}

ListBuyがデータベースに存在しない場合、IQueryableを返すことはできません。多分これはうまくいくでしょう。

public IEnumerable<ListBuy> GetListMemberBuy()
{
    var membuy =
    from mem in this.ObjectContext.Members
    from b in this.ObjectContext.Buys.Where(b => b.ID_member == mem.ID)
    .OrderByDescending(b => b.ID)
    .DefaultIfEmpty()
    select new { b.ID, mem.Name, b.Money, b.Tarikh };
    return membuy
        .AsEnumerable()
        .Select(b => new ListBuy() { 
            ID = b.ID, Name = b.Name, Money = b.Money, Tarikh = b.Tarikh
        });
}

質問にListBuyクラス定義を含めなかったため、これは少し推測です。

于 2012-08-09T09:26:05.257 に答える