在LINQ

时间:2017-04-12 05:06:47

标签: c# .net entity-framework linq

我有一个在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;方法,这个方法无法翻译成一个   商店表达。

请帮助解决此案。 如果有任何其他解决方法,请帮助我,以避免将私人更改为公共属性。

0 个答案:

没有答案