[英]Converting types C#
我在以下方法上遇到困難:
public override List<Team> Search(Dictionary<string, string> prms,
int pageSize, int page, out int results)
{
List<Team> t = null;
//Team t = null;
var tresults = new List<Team>();
using (SqlConnection conn = DB.GetSqlConnection())
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"SearchForTeam";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
foreach (var key in prms.Keys)
{
cmd.Parameters.Add(key, prms[key]);
}
SqlDataReader reader
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
var temp = Load(reader);
if (t == null)
{
t = temp;
}
else
{
t.CityHistory.Add(temp.CityHistory[0]);
}
}
}
}
results = 0;
return t;
}
錯誤主要在於if和else語句,其中if塊中的溫度聲稱其“無法將DataLayer.Team類型隱式轉換為System.Collections.GenericList”
編輯:這是我的加載方法:
public Team Load(SqlDataReader reader)
{
var team = new Team()
{
TeamID = Int32.Parse(reader["TeamID"].ToString()),
TeamName = reader["TeamName"].ToString()
};
team.CityHistory.Add(
new TeamCity(
Int32.Parse(reader["TeamCitiesID"].ToString()),
team.TeamID,
Int32.Parse(reader["CityID"].ToString()),
reader["CityName"].ToString(),
Int32.Parse(reader["YearStart"].ToString()),
Int32.Parse(reader["YearEnd"].ToString())
)
);
return team;
}
t
定義為List<Team>
,但稍后再說t.CityHistory
。 CityHistory顯然不是List<>
的屬性。 我猜這是Team
的財產,但是由於您從沒有向我們表明我們不能說。
向我們展示Team
的定義和Load()
的方法簽名,也許我們可以給出答案。
UPDATE(來自OP的更新)
現在,我假設您將獲得多行,每個城市一行,重復團隊信息。 因此,您想要的是:
var temp = Load(reader);
// remove t definition above
var t = tresults.FirstOrDefault(team=> team.TeamId == temp.TeamId);
if (t == null)
{
t = temp;
tresults.Add(t);
}
else
t.CityHistory.Add(temp.CityHistory[0]);
(根據史蒂夫的評論再次更新)
您必須先將temp
包裝到List中,然后將其分配給t
:
if (t == null) {
t = new List<Team>() { temp }
} else {
t.add(temp);
}
非常長的評論:
請考慮以下方法重構:
private IEnumerable<Team> LoadTeams()
{
using (SqlConnection conn = DB.GetSqlConnection())
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = @"SearchForTeam";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
foreach (var key in prms.Keys)
{
cmd.Parameters.Add(key, prms[key]);
}
SqlDataReader reader
= cmd.ExecuteReader(CommandBehavior.CloseConnection);
while (reader.Read())
{
yield return Load(reader);
}
}
}
}
public override List<Team> Search(Dictionary<string, string> prms,
int pageSize, int page, out int results)
{
List<Team> searchResult = new List<Team>;
//Team t = null;
var tresults = new List<Team>();
foreach(Team team in LoadTeams())
{
if (team .....)
searchResult.Add(team);
}
results = 0;
return searchResult;
}
請考慮以下需要的初始化:
List<Team> searchResult = new List<Team>;
並問自己: 以下摘錄應做什么? :
if (team .....)
searchResult.Add(team);
PS:也是線
results = 0;
應該看起來像:
results = searchResult.Count;
我不得不在這里稍作猜測,但是我假設您的Load()方法返回的數據類型為“ DataLayer.Team”,聽起來像是一個團隊,而您正在嘗試將其分配給“ t”,這是球隊名單。
嘗試:
t.Add(temp)
要么
t.Add(temp as Team).
一直使用'var'聲明並沒有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.