【问题标题】:Linq to entities join not workingLinq 到实体加入不起作用
【发布时间】:2011-05-24 18:26:28
【问题描述】:

知道为什么下面的代码无法编译吗?

IEnumerable users;
using (var ent = new GatekeeperEntities())
{
    users = from t1 in ent.Users
            join t2 in ent.UserStatus1 on t1.ID equals t2.UserId
            where t2.ExpirationDateTime != null
            select new {t1.ID, t1.Name, t1.UserName, t2.Status };
    }

foreach (var user in users)
{
    user.ID; // Cannot resolve symbol ID
}

【问题讨论】:

    标签: c# .net linq entity-framework linq-to-entities


    【解决方案1】:

    重组你的代码如下。

    using (var ent = new GatekeeperEntities())
    {
        var users = from t1 in ent.Users
            join t2 in ent.UserStatus1 on t1.ID equals t2.UserId
            where t2.ExpirationDateTime != null
            select new {t1.ID, t1.Name, t1.UserName, t2.Status };
    
        foreach (var user in users)
        {
            user.ID;
        }
    }
    

    【讨论】:

    • 即使将users 定义为var 而不是IEnumerable?
    • 你记得用 var 代替 IEnumerable 吗?
    • 啊,明白了,解决了它。谢谢!
    【解决方案2】:

    IEnumerable 的内容是 System.Object 类型的,你需要使用 var 关键字代替,这样编译器会推断用户是 IEnumerable<T> 类型的匿名类型 T。如果你想使用匿名类型,遍历 using 块范围内的元素。

    【讨论】:

      【解决方案3】:

      尝试在循环中强制转换您的用户对象。

      foreach (var user in users)   
      {
          ((User)user).ID;
      }
      

      【讨论】:

        【解决方案4】:
          user.Id; <-----Cannot resolve symbol ID
        

        根据您的代码,它应该是user.ID(大写而不是小写)- 大小写很重要。

        您还拥有user 声明为IEnumerable - 所以你不会得到它真正类型的任何属性,只有IEnumerable 上可用的属性 - 将它声明为 var 并在 using 语句中使用它,或者创建一个类而不是使用匿名类型。

        【讨论】:

        • 对不起,我修好了,它是 user.ID。同样的错误。它不会智能感知任何属性。
        【解决方案5】:

        请记住:您通常在 SQL 中使用连接完成的工作,可以通过在 EF 中移动关系来简单地完成:

        users = from t2 in ent.UserStatus.Include("User") 
        where t2.ExpirationDateTime != null
        select t2
        

        这将为您提供所需的UserStatuses,您可以通过在您的模型中适当定义的属性User 访问每个UserStatusUser

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-01
          相关资源
          最近更新 更多