我有一点与下面的代码有问题的:LINQtoSQL错误:比较运营商不支持
var composer =
(from comp in db.Composers
where comp.Composer_Name.Contains(composerTextbox.Text)
select comp.Composer_ID);
var song =
(from sng in db.Songs
where sng.Composer_ID.Equals(composer)
select sng.Track_ID);
var track =
(from trk in db.Tracks
where trk.Track_ID.Equals(song)
select trk.CD_ID);
e.Result =
from result in db.CDs
where result.CD_ID.Equals(track)
select new { result.CD_Title };
,当我尝试运行代码,弹出的错误如下:
Comparison operators not supported for type 'System.Linq.IQueryable`1[System.Int16]'.
这里的数据库是如何安排的:
- 光盘
- CD_ID
- CD_Title
- 曲目
- CD_ID
- Track_ID
- 歌曲
- Track_ID
- Composer_ID
- 作曲家
- Composer_ID
- Composer_Name
我的代码中的主要目标是让日用户在数据库中搜索由他们选择的人组成的CD。请注意,某些CD可能有多个作曲家,因为歌曲/曲目允许在Composer部分中输入多个条目。
应该返回给用户的是GridView中的CD列表。
任何帮助都将不胜感激!
编辑:
正如柯克沃尔先生说,就是我真正想要做的是返回的CD列表针对可能很多作曲家的ID。
我继续和更新的代码就像他建议:
var composers =
(from comp in db.Composers
where comp.Composer_Name.Contains(composerTextbox.Text)
select comp.Composer_ID).ToArray();
var song =
(from sng in db.Songs
where composers.Contains(sng.Composer_ID)
select sng.Track_ID);
我尝试以下,看它是否会弹出光盘的正确的列表:
var composer =
(from comp in db.Composers
where comp.Composer_Name.Contains(composerTextbox.Text)
select comp.Composer_ID).ToArray();
这是应该抓住所有有效的Composer ID并将它们放入数组中。
var song =
(from sng in db.Songs
where composer.Contains(sng.Composer_ID)
select sng.Track_ID).ToArray();
这是应该查看有效的Composer ID列表并创建一个新的有效歌曲数组。
var track =
(from trk in db.Tracks
where song.Contains(trk.Track_ID)
select trk.CD_ID).ToArray();
这是应该查看有效歌曲的列表并创建一个新的有效曲目数组。
e.Result =
from result in db.CDs
where track.Contains(result.CD_ID)
select new { result.CD_Title };
这是应该查看有效曲目列表并提取所有与它们相关的CD标题。
我试着运行代码,并没有例外,但搜索中返回的唯一结果是数据库中的第一张CD。任何搜索新作曲者的尝试都只能返回相同的CD。
这是抛出第一个查询? – IAbstract 2011-05-13 23:12:19
我看到了您的编辑,但是如果您没有收回任何行,调试将会更加棘手。我建议你[调试SQL输出](http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11),并尝试直接在SSMS中运行它,并首先调试原始SQL。一旦找出需要改变的地方,我们应该能够回到LinqToSql并进一步调试。 – 2011-05-14 02:54:02