我想要检索数据,并设置动态添加到entityobject(通过分部类)的属性。
我该怎么做呢?
这是我的问题:
var ret = (from item in contex.Items
select new Itemm
{
Title = item.Title,
Count = 1 // more complex: Count =item.refToAnotherEntity.Count()
});
public partial class Itemm
{
public int Count { get; set; }
}我收到以下错误:无法在LINQ to Entities查询中构造实体或复杂类型
发布于 2011-01-25 03:29:23
问题是Linq to Entities试图将整个表达式转换为SQL。这在你的“新”语句中是不可能实现的。
尝试以下操作:
var ret = (from item in contex.Items
select new Itemm
).ToList();
ret = (from item in ret
select new Itemm
{
Title = item.Title,
Count = 1
}).ToList();基本上,在尝试重新构造结果之前,您要确保从SQL server返回结果( ToList()可以做到这一点)。它并不美观,您可能可以将其清理一下,但上面的代码应该可以工作。
发布于 2011-01-25 03:38:53
您的查询将不会转换为正确的SQL,因为linq将不知道如何处理您的额外属性。
有一些方法可以初始化您的自定义属性。
您可以创建
部分无效的OnCreated() {}
并在此处编写您的自定义初始化,如果您希望在从数据库加载之后加载,则可以重写
protected override void OnLoaded(bool OnLoaded){ base.OnLoaded( initial);}
发布于 2012-09-25 01:34:18
我正在努力实现和你一样的结果。到目前为止,我最好的解决方案是为我的实体创建一个包装器,该包装器具有Count属性,以便在分部类上设置额外属性。以您的案例为例,这将是这样的:
public class ItemWithCount
{
public Item Item { get; set; }
public int Count
{
get { return Item.Count; }
set { Item.Count = value; }
}
}然后,您可以像这样进行查询:
var ret = (from item in contex.Items
select new ItemWithCount
{
Item = item,
Count = item.refToAnotherEntity.Count()
}).AsEnumerable().Select(x => x.Item);您可以选择具有相同2个属性的匿名类型,而不是创建包装器,但这意味着在查询之后,您必须遍历结果并设置每个实体的属性Count的值。如下所示:
var ret = (from item in contex.Items
select new
{
Item = item,
Count = item.refToAnotherEntity.Count()
});
Parallel.ForEach(ret, x => x.Item.Count = x.Count);
var results = ret.Select(x => x.Item);我更喜欢第一个选项,尽管我希望有一个不需要创建新类的解决方案……有什么想法吗?
https://stackoverflow.com/questions/4786142
复制相似问题