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 方法实际上返回匿名类型的 IQueryable,而不是 ListBuy 类型的 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 回答