【问题标题】:I am working on linq to entity framework and i have issue in getting data in my service我正在研究 linq to entity 框架,但在我的服务中获取数据时遇到问题
【发布时间】:2016-12-07 20:19:18
【问题描述】:
  public VirtualNumber getVirtualNumber(string address)
    {
        using (PushMessageDBContext dbcontext = new PushMessageDBContext())
        {
            var vNumber = from n in dbcontext.VirtualNumber
                          where n.Address == address
                          select new
                          {
                              VirtualNumber = n,
                              KeyWords = n.Keywords.OrderBy(k => k.KeywordName)
                          };
           // return vNumber;
        }
    }

出现错误

严重性代码描述项目文件行抑制状态 错误 CS0266 无法将类型“System.Linq.IQueryable>”隐式转换为“SMPushMessage.Models.VirtualNumber”。存在显式转换(您是否缺少演员表?) SMPushMessage D:\ServerProjects\SMPushMessage\smpushmessage\SMPushMessage\SMPushMessage\Services\imp\VirtualNumberService.cs 22 Active

谁能告诉我怎么解决??

【问题讨论】:

  • 您正在返回一个 VirtualNumber,但您选择了多个。
  • 你需要什么? 1个还是多个?你的问题并不清楚。
  • 我需要1个虚拟号码,其关键字可能是多个

标签: c# entity-framework linq


【解决方案1】:

您正在选择匿名类型。如果你想返回VirtualNumber,你应该首先选择它。

(from n in dbcontext.VirtualNumber
 where n.Address == address
 select n).FirstOrDefault();

如果您发布 VirtualNumber 课程,我可以进一步帮助您。

就像 grmbl 指出的那样,这将返回一个列表。如果你想要一个对象,你需要.FirstOrDefault()

编辑:假设VirtualNumber包含Keywords的列表

(from n in dbcontext.VirtualNumber
 where n.Address == address
 select new VirtualNumber
 {
     KeyWords = n.Keywords.OrderBy(k => k.KeywordName)
 }).FirstOrDefault();

【讨论】:

    【解决方案2】:

    是的,你的选择不行,我觉得应该像下面这样(我不知道VirtualNumber的属性):

    select new VirtualNumber 
                              {
                                  KeyWords = n.Keywords.OrderBy(k => k.KeywordName)
                              }.FirstOrDefault();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-09
      • 2018-09-02
      • 2017-03-07
      • 2021-07-11
      • 2022-01-24
      • 2022-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多