2014-12-16 3 views
0

Мне интересно, может ли кто-нибудь помочь мне, проблема заключается в том, что я не могу вернуть результаты в строке конкатенации с использованием Linq. Запрос отлично работает вопрос в том, как объединить результаты в виде строки, строки так далее, так как может быть много хэш-теговконкатенировать результаты запроса Linq

var contacttag = (from HE in HashTagEntities 
join t in Accounts on HE.Parentid equals t.id 
where HE.ParentId == 3 && 
t.AccountName == "Test" 
from tag in HashTags 
where HE.HashTagid == tag.HOCODE 
select new { tag.HashTagText }).Select(x => x.HashTagText.ToString()); 

Если кто-то может помочь я был бы признателен Я получаю ошибку ниже:

«LINQ to Entities не распознает метод« System.String ToString() », и этот метод не может быть переведен в выражение хранилища».

+0

Я думаю, что если вы произнесете запрос '(от HE в ... tag.HashTagText})' to 'IEnumerab le '(где' T' - тип 'HashTagText'), он должен работать. Это должно избегать прохождения методов расширения сущностей. Если это не сработает, вам, возможно, придется использовать 'ToList()' перед 'Select()', чтобы выйти из обработки Entities запроса. –

ответ

2

Вы уже выбрали коллекцию строк с номером select new { tag.HashTagText }, поэтому их не нужно будет повторять или позвонить по номеру .ToString().

Вы должны быть в состоянии просто использовать string.Join():

var contacttag = from HE in HashTagEntities 
       join t in Accounts on HE.Parentid equals t.id 
       where HE.ParentId == 3 && 
       t.AccountName == "Test" 
       from tag in HashTags 
       where HE.HashTagid == tag.HOCODE 
       select tag.HashTagText; 

var tags = string.Concat(contacttag); 

или в .NET 3.5:

var tags = string.Concat(contacttag.ToArray()); 

Я не вижу никаких причин, почему один будет настаивать на этом в одном , но это можно сделать:

var tags = string.Concat((from HE in HashTagEntities 
       join t in Accounts on HE.Parentid equals t.id 
       where HE.ParentId == 3 && 
       t.AccountName == "Test" 
       from tag in HashTags 
       where HE.HashTagid == tag.HOCODE 
       select tag.HashTagText).ToArray()); 
+0

Может ли это быть сделано в одном запросе, я попробовал var tags = string.Join ("", ПОЛНЫЙ QUERY TO ARRAY); и я получил Linq не признает string.Join –

+0

@BillyJoe - Вы имеете в виду в одной строке? Лично я считаю, что это более читаемо, если вы сначала определяете запрос, а затем объединяете полученные строки. – martinstoeckli

+0

Я почему-то спрашиваю, потому что эта часть запроса заполняет список для каждого клиента многих клиентов. Я хотел, чтобы квест был направлен вперед, и я старался не усложнять его. –