C# 使用LINQ到SQL的子查询
我在我的C#教程项目中使用LINQtoSQL,但我有它的基本知识 我进行了如下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
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。请详细说明您的答案并使用代码格式。