有一个数据库模型,其中包含两个与外键相关的实体,例如
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
是否可以创建一个可以解包其内容而不是调用此方法的方法?
解决:这两个答案都适合解决我的问题,但第二个答案是我要找的那个,谢谢你们两个
答案 0 :(得分: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
方法)。
答案 1 :(得分: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();