我有一點與下面的代碼有問題的: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