2

有一个数据库模型,其中包含两个与外键相关的实体,例如

class Item
{
  public int ID;
  public string Name;
  public int StatusID;
}

class Status
{
  public int ID;
  public string Name;
}

有我自己的课

class MyClassFormat 
{
  public int ID;
  public string Name;
  public string Status;
}

现在我想创建一个返回自己的类的方法,就像这样

MyClassFormat getTtem(this Item item)
{
  return new MyClassFormat{ID = item.ID, Name = item.Name, Status = item.Statuses.Name}
}

问题是当我使用这个方法时,我得到一个异常,我的方法没有支持的 SQL 转换

是否可以创建这样一个方法来解开其内容而不是调用此方法?

已解决:两个答案都适合解决我的问题,但第二个是我要找的,谢谢两位

4

2 回答 2

2

任何一个:

query
    .Select(item => new
    {
        ID = item.ID,
        Name = item.Name,
        Status = item.Statuses.Name
    })
    .ToArray()
    .Select(item => new MyClassFormat
    {
        ID = item.ID,
        Name = item.Name,
        Status = item.Status
    });

或者:

query
    .ToArray()
    .Select(item => getTtem(item));

第一种方法写入时间较长,但从数据库加载的数据较少。无论如何,您需要具体化查询结果(ToArray示例中的方法)。

于 2013-07-27T19:35:03.873 回答
0

如果您的目标是编写代码以在多个查询中重用,您可以分解出如下表达式:

static Expression<Func<Item, MyClassFormat>> ItemToClassFormat()
{
    return item => new MyClassFormat 
       {
           ID = item.ID, 
           Name = item.Name, 
           Status = item.Statuses.Name
       }
}

这可以类似于以下方式使用:

IQueryable<Item> query = ...;
var selector = ItemToClassFormat();
var results = query.Select(selector).ToList();
于 2013-07-27T21:06:48.030 回答