Я ломаю голову над этим и решил поделиться с вами своей проблемой. Я хочу создать анонимный выбор из нескольких таблиц, некоторые из которых могут содержать более одного результата.я хочу объединить эти результаты в одну строку, я сделал что-то вроде этого:
var resultTable = from item in dc.table
select new
{
id= item.id,
name= CreateString((from name in item.Ref_Items_Names
select name.Name).ToList()),
};
и CreateString ():
private string CreateString(List<string> list)
{
StringBuilder stringedData = new StringBuilder();
for (int i = 0; i < list.Count; i++)
{
stringedData.Append(list[i] + ", ");
}
return stringedData.ToString();
}
мои намерения состояли в том, чтобы преобразовать запрос "имя"перечислить и затем отправить его в CreateString (), чтобы преобразовать его в одну длинную каскадную строку.
Я пытался использовать .Aggregate ((current, next) => current + "," + next);но когда я пытаюсь преобразовать свой запрос в DataTable, как показано ниже:
public DataTable ToDataTable(Object query)
{
DataTable dt = new DataTable();
IDbCommand cmd = dc.GetCommand(query as IQueryable);
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = (SqlCommand)cmd;
cmd.Connection.Open();
adapter.Fill(dt);
cmd.Connection.Close();
return dt;
}
я получаю исключение, что dc.GetCommand () "не может понять запрос с помощью метода Aggregate, позже я даже попытался использовать этопростой запрос:
var resultTable = from itemin dc.table
select new
{
name = CreateString()
};
Когда CreateString () возвращает «success», ничего не вставляется в «name», почему нет способа использовать методы в предложении select?Спасибо, Йотам