Привет это кажется, что должно работать,
from something in collectionofsomestuff
select new SelectListItem(){Text = something.Name, Value = something.SomeGuid.ToString(), Selected = false};
Когда я пытаюсь сделать это, это не работает, дают мне ошибку
LINQ к Объектам не распознает метод 'Система. Представьте ToString в виде строки ()' метод, и этот метод не может быть переведен в выражение хранилища.
Существует ли обходное решение?
Не все методы CLR можно использовать с Linq-to-Entities. ToString () кажется одним из них.
Взгляните на Метод CLR для отображения канонических функций .
Возможно, попробуйте явно указать GUID для строковой переменной вне Linq.
string myGuid = SomeGuid.ToString();
from something in collectionofsomestuff
select new SelectListItem(){Text = Name, Value = myGuid, Selected = false};
В итоге я сделал такой метод foreach
List<SelectListItem> list = new List<SelectListItem>();
foreach (SomeThing something in collectionofsomestuff)
{
list.Add(new SelectListItem(){Text = something.Name,Selected = false,Value = something.SomeGuid.ToString()});
}
это единственный способ заставить его работать ... это было не то, на что я надеялся сделать сложный ..
Создайте конструктор для SelectListItem, который принимает ваше значение как Guid и ToString его там. Теперь вызовите свой запрос так:
from something in collectionofsomestuff select new SelectListItem(something.Name, something.SomeGuid, false);
Я не слишком хорошо знаю выражения запросов Linq, но следующее должно помочь:
collectionofsomestuff //here it's LinqToEntities
.Select(something=>new{something.Name,something.SomeGuid})
.ToArray() //From here on it's LinqToObjects
.Select(s=>new SelectListItem()
{
Text = s.Name,
Value = s.SomeGuid.ToString(),
Selected = false
})