我有具有以下字段的表:如何創建linq查詢將行連接到字符串?
ID名稱得分事件
(約翰一書2 3) (約翰二書4 3) (3約翰5 3)
和我會希望得到以下結果:
(約翰,「2 + 4 + 5」,11(總分))
我想要的結果相結合來展示以字符串格式的總和再展總和結果。 任何人都可以請幫我解決這個問題。 謝謝 弗朗西斯科
我有具有以下字段的表:如何創建linq查詢將行連接到字符串?
ID名稱得分事件
(約翰一書2 3) (約翰二書4 3) (3約翰5 3)
和我會希望得到以下結果:
(約翰,「2 + 4 + 5」,11(總分))
我想要的結果相結合來展示以字符串格式的總和再展總和結果。 任何人都可以請幫我解決這個問題。 謝謝 弗朗西斯科
您需要使用方法,如string.Format
或string.Join
前致電toList()
方法,因爲它們不會被支持的LINQ到SQL。
你應該修改你的代碼是這樣的:
var group = (from Classificacao in _dbSet.classificacao
from Evento in _dbSet.evento
where Classificacao.class_id_Evento == id_evento
where Evento.id_evento == id_evento
group Classificacao by new
{
Classificacao.class_atletaNome,
Classificacao.class_numAtleta,
Classificacao.class_atletaEquipa,
Classificacao.class_paisAtleta,
Evento.even_name,
Evento.local.local_nome,
Evento.compTipo.CompTipo_name
} into g).ToList()
的想法是在調用方法之前兌現查詢到列表中。
var model = group.Select(g => new
{
g.Key.class_numAtleta,
g.Key.class_atletaEquipa,
g.Key.class_atletaNome,
g.Key.class_paisAtleta,
class_fianlAtleta = g.Sum(c => c.class_fianlAtleta.Value),
class_classGeral = g.Min(c => c.class_fianlAtleta.Value),
class_nome = g.Key.even_name,
local_nome = g.Key.local_nome,
CompTipo_name = g.Key.CompTipo_name,
class_40ponto = ((from u in g
where u.class_id_Evento == id_evento
group u by new
{
u.class_atletaNome,
u.class_fianlAtleta
}
into k
select new
{
//Score = string.Concat(k.Key.class_fianlAtleta.ToString(), " + ", g.Key.class_atletaNome)
Score = string.Format("{0}",k.Key.class_fianlAtleta)
})).Select(c=>c.Score).FirstOrDefault()
}).OrderBy(c => c.class_fianlAtleta).ThenBy(c => c.class_classGeral)).toList();
我不能檢查,如果代碼是正確的,因此我把它交給你了,反正一旦你有你的列表在內存中您可以應用LINQ的支持,以實體的方法。
你需要的東西是這樣的:
var result = table
.GroupBy(t => new { t.Name, t.Event })
.ToList()
.Select(t => new
{
Name = t.Key.Name,
JoinedScores = string.Join(" + ", t.Select(group => group.Score).ToArray()),
TotalScore = t.Sum(group => group.Score).ToString() + " (Total Score)"
}).ToList();
到ToList()
方法的第一個電話是必要的,因爲LINQ到SQL將不支持來電string.Join()
。我不確定,但可能您可以通過致電AsEnumerable()
來替換它。
你好,謝謝你的回答。我已allready嘗試sting.Join,string.format和聚合和allways得到以下錯誤:LINQ to Entities不識別方法'System.String Format(System.String,System.Object)'方法,並且此方法不能翻譯成商店表達。 – Francisco
LINQ to Entities不識別方法'System.String Format(System.String,System.Object)'方法,並且此方法不能轉換爲存儲表達式。 – Francisco
@Francisco我已經看到您的新回覆,我添加了一個新回覆來解釋您要遵循的策略。 – user449689
這裏是我的代碼:
var model = (from Classificacao in _dbSet.classificacao
from Evento in _dbSet.evento
where Classificacao.class_id_Evento == id_evento
where Evento.id_evento == id_evento
group Classificacao by new
{
Classificacao.class_atletaNome,
Classificacao.class_numAtleta,
Classificacao.class_atletaEquipa,
Classificacao.class_paisAtleta,
Evento.even_name,
Evento.local.local_nome,
Evento.compTipo.CompTipo_name
} into g
select new
{
g.Key.class_numAtleta,
g.Key.class_atletaEquipa,
g.Key.class_atletaNome,
g.Key.class_paisAtleta,
class_fianlAtleta = g.Sum(c => c.class_fianlAtleta.Value),
class_classGeral = g.Min(c => c.class_fianlAtleta.Value),
class_nome = g.Key.even_name,
local_nome = g.Key.local_nome,
CompTipo_name = g.Key.CompTipo_name,
class_40ponto = ((from u in g
where u.class_id_Evento == id_evento
group u by new
{
u.class_atletaNome,
u.class_fianlAtleta
}
into k
select new
{
//Score = string.Concat(k.Key.class_fianlAtleta.ToString(), " + ", g.Key.class_atletaNome)
Score = string.Format("{0}",k.Key.class_fianlAtleta)
})).Select(c=>c.Score).FirstOrDefault()
}).OrderBy(c => c.class_fianlAtleta).ThenBy(c => c.class_classGeral);de here
嗨。你的代碼工作正常。現在string.join工作和string.format工作。最佳。但我還有一個問題:在我的字符串格式中,他總是得到相同的值並重復它。第一次,第二次...再次感謝你 – Francisco
@Francisco,請更好地解釋它,我不明白你的意思是什麼「在我的string.format他總是得到相同的價值,並重復它。可以第一,第二...爲「。 – user449689
您好,例如:一個athelte可能必須在季節多於一個的得分和IDEIA是顯示所有他的得分在季節中具有以下格式的字符串:(5 + 6 + 3),該運動員的。 1ª得分+2ª得分+3ªscore... – Francisco