C# 使用LINQ到SQL的子查询

C# 使用LINQ到SQL的子查询,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,我在我的C#教程项目中使用LINQtoSQL,但我有它的基本知识 我进行了如下SQL查询: SELECT ID,HeroName,HeroRarity,Initiative,Attack,Attack1 FROM CharactersName WHERE ID IN( SELECT HeroID FROM Hero_Group WHERE GroupID=1 ) void Fi

我在我的C#教程项目中使用LINQtoSQL,但我有它的基本知识

我进行了如下SQL查询:

SELECT ID,HeroName,HeroRarity,Initiative,Attack,Attack1 
FROM   CharactersName
WHERE  ID IN(
             SELECT HeroID 
             FROM   Hero_Group 
             WHERE GroupID=1
            )
void FilterGroup()
    {
        HDAEntities db = new HDAEntities();
        var query = from obj in db.CharactersNames
                    where obj.ID == from obj2 in db.Hero_Group
                                    where obj2.GroupID == comboBox1.SelectedIndex
                                    select new
                                    {
                                        obj2.GroupID
                                    }
                    select new
                    {
                        obj.ID,
                        obj.HeroName,
                        obj.HeroRarity,
                        obj.Initiative,
                        obj.Attack,
                        obj.Attack1
                    };
    }
void FilterGroup()
{
    HDAEntities db = new HDAEntities();

    var subQuery = db.Hero_Group.Where(h => h.GroupID == comboBox1.selectedIndex)
                                .Select(h => h.GroupID);

    var query = from obj in db.CharactersNames
                where subQuery.Contains(obj.ID)
                select new
                {
                    obj.ID,
                    obj.HeroName,
                    obj.HeroRarity,
                    obj.Initiative,
                    obj.Attack,
                    obj.Attack1
                };

    var result = query.ToList(); // this is where your query and subquery are evaluated and sent to the database

    db.Dispose();
    db = null;
}
(Hero_Group)是一个表,用于处理(CharactersName)表和另一个名为(Groups)的表之间的多对多关系,其中一个字符可以位于多个组中

我试着用LINQ这样写:

SELECT ID,HeroName,HeroRarity,Initiative,Attack,Attack1 
FROM   CharactersName
WHERE  ID IN(
             SELECT HeroID 
             FROM   Hero_Group 
             WHERE GroupID=1
            )
void FilterGroup()
    {
        HDAEntities db = new HDAEntities();
        var query = from obj in db.CharactersNames
                    where obj.ID == from obj2 in db.Hero_Group
                                    where obj2.GroupID == comboBox1.SelectedIndex
                                    select new
                                    {
                                        obj2.GroupID
                                    }
                    select new
                    {
                        obj.ID,
                        obj.HeroName,
                        obj.HeroRarity,
                        obj.Initiative,
                        obj.Attack,
                        obj.Attack1
                    };
    }
void FilterGroup()
{
    HDAEntities db = new HDAEntities();

    var subQuery = db.Hero_Group.Where(h => h.GroupID == comboBox1.selectedIndex)
                                .Select(h => h.GroupID);

    var query = from obj in db.CharactersNames
                where subQuery.Contains(obj.ID)
                select new
                {
                    obj.ID,
                    obj.HeroName,
                    obj.HeroRarity,
                    obj.Initiative,
                    obj.Attack,
                    obj.Attack1
                };

    var result = query.ToList(); // this is where your query and subquery are evaluated and sent to the database

    db.Dispose();
    db = null;
}
但这当然是胡言乱语


有人能帮我吗?(请注意,我对LINQ to SQL知之甚少)


~TIA~

你可以这样做:

SELECT ID,HeroName,HeroRarity,Initiative,Attack,Attack1 
FROM   CharactersName
WHERE  ID IN(
             SELECT HeroID 
             FROM   Hero_Group 
             WHERE GroupID=1
            )
void FilterGroup()
    {
        HDAEntities db = new HDAEntities();
        var query = from obj in db.CharactersNames
                    where obj.ID == from obj2 in db.Hero_Group
                                    where obj2.GroupID == comboBox1.SelectedIndex
                                    select new
                                    {
                                        obj2.GroupID
                                    }
                    select new
                    {
                        obj.ID,
                        obj.HeroName,
                        obj.HeroRarity,
                        obj.Initiative,
                        obj.Attack,
                        obj.Attack1
                    };
    }
void FilterGroup()
{
    HDAEntities db = new HDAEntities();

    var subQuery = db.Hero_Group.Where(h => h.GroupID == comboBox1.selectedIndex)
                                .Select(h => h.GroupID);

    var query = from obj in db.CharactersNames
                where subQuery.Contains(obj.ID)
                select new
                {
                    obj.ID,
                    obj.HeroName,
                    obj.HeroRarity,
                    obj.Initiative,
                    obj.Attack,
                    obj.Attack1
                };

    var result = query.ToList(); // this is where your query and subquery are evaluated and sent to the database

    db.Dispose();
    db = null;
}

请注意,在调用ToList()之前,不会计算子查询。您还需要处理该对象(或尝试使用语句创建hdaenties对象)。另外,请确保在评估查询之前不处理数据库(在dispose之后调用ToList将引发异常)。

您会遇到什么错误?尝试像这样还原内部查询
where(来自obj2…).Contains(obj.ID)
where subQuery.Contains(obj.ID)这一行有错误==>where subQuery.Contains(obj.ID)错误3无法将lambda表达式转换为类型“string”,因为它不是委托类型C:\Users\DELL\Documents\Visual Studio 2010\Projects\HDA\u InfoBook\HDA\u InfoBook\ViewAll。cs 104 25 HDA\u InfoBook您的obj.ID和h.GroupID是同一类型的吗?或者obj.ID可能是string?Table(Hero_Group):herod(smallint),GroupID(tinyint)-Table(CharactersName):ID(smallint)-Table(Groups):ID(tinyint)@Cosmin您可以
使用
语句来处理dbcontextWelcome to stackoverflow。请详细说明您的答案并使用代码格式。