【问题标题】:Pulling out different columns from different tables using LINQ使用 LINQ 从不同的表中提取不同的列
【发布时间】:2011-03-23 16:58:09
【问题描述】:

我有两张桌子:

实体
ID (PK), 整数
名称
描述

用户
身份证(PK)
EntityID, int(这个没有连接到Entity表)

现在我正在使用 LINQ 来提取具有 Entity.ID = something 的记录。这将在我的 GridView 中显示几条记录。

这是我的 LINQ 语句:

protected void Page_Load(object sender, EventArgs e)
{
    string getEntity = Request.QueryString["EntityID"];
    int getIntEntity = Int32.Parse(getEntity);
    OISEntityTestingDataContext db = new OISEntityTestingDataContext();
    //OISLinqtoSQLDataContext db = new OISLinqtoSQLDataContext();
    var tr =
        from r in db.Users
        join s in db.Entities on r.UserID equals s.ID
        where s.ID == getIntEntity
        select new
        {
            //To Show Items in GridView!
        };

    GridView1.DataSource = tr;
    GridView1.DataBind();
}

现在我收到关于“加入”的错误消息:

连接子句中的一个表达式的类型不正确。调用“加入”时类型推断失败。

这是什么意思?有人可以帮我解决这个问题。谢谢!

【问题讨论】:

  • 你确定这两个 id 的类型相同,int32 不是 int16 或其他。
  • 您确定r.UserIDs.ID 属于同一类型吗?
  • 两者都是SQL中的INT类型。
  • 两者是否都映射到您的模型中的 Int32(好像您正在使用实体框架)。
  • @klm9971 在 VS 中让鼠标悬停在它们上方:这应该显示 C# 看到的类型,以防万一它们不同。

标签: c# asp.net linq-to-sql web-applications


【解决方案1】:

基本上,您收到的错误告诉您编译器不知道如何比较这两个值,因为一个值与另一个不同。您确定您没有将stringint 进行比较吗?如果这是您的情况,您显然可以解析字符串,如下所示:

var tr =
    from r in db.Users
    join s in db.Entities on int.Parse(r.UserID) equals s.ID
    where s.ID == getIntEntity
    select new
    {
        //To Show Items in GridView!
    };

【讨论】:

    【解决方案2】:

    我敢打赌,您的一个连接条件的类型与另一个的类型不匹配。

    连接子句中的其中一个表达式的类型不正确。

    确保它们在您的实体映射中匹配。

    在您的帖子中,您将表列为具有“ID”列,但在联接中,一个是 ID,另一个是 UserID。您确定您加入了正确的列吗?

    【讨论】:

    • 我明白了。理查德的回答同上。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2016-09-27
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多