我有一个在Entity Framework Code First中使用的实体。
public class MyEntity
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public List<string> ListOfValues
{
get
{
return StringsAsStrings?.Split(';').ToList();
}
set
{
StringsAsStrings = value.Count > 0 ? String.Join(";", value) : null;
}
}
[Column("ListOfValues")]
private string StringsAsStrings { get; set; }
public int RelationId { get; set; }
}
这里我将List作为List给予public,并且应该像表中一样以分号(;)分隔的字符串存储。
由于这是特定于此数据模型的,因此我将 StringsAsStrings 指定为私有,并创建了一个约定以包含在迁移中。所有这些都很好。
现在我的方案是使用 LINQ 选择集合。请检查我使用的以下linq查询;
var items = from A in MyContext.MyEntities.Where(x => x.RelationId == paramId)
select new
{
Id = A.Id,
Name = A.Name,
ListOfValues = A.ListOfValues,
};
var result = items.ToList();
这里我收到了以下错误
指定的类型成员&#39; ListOfValues &#39; LINQ不支持 实体。仅初始化程序,实体成员和实体导航 支持属性。
好的。 EF不支持NotMapped属性。因此,对于我的工作,我只是将私有的StringsAsStrings更改为 public StringsAsStrings 。然后改变下面的linq;
var items = from A in MyContext.MyEntities.Where(x => x.RelationId== paramId)
select new
{
Id = A.Id,
Name = A.Name,
ListOfValues = A.StringsAsStrings.Split(';').ToList(),
};
var s = items.ToList();
现在我收到以下错误;
LINQ to Entities无法识别方法&#39; System.String [] 分裂(CHAR [])&#39;方法,这个方法无法翻译成一个 商店表达。
请帮助解决此案。 如果有任何其他解决方法,请帮助我,以避免将私人更改为公共属性。