После проверки возможного дублирования, предложенного Рокки. Я нашел решение для своего конкретного случая, и я также думаю, что это самое чистое решение на данный момент. Слава @ Эмилиус Мфуруки.
Было несколько других рекомендаций, но добавление flex: 1/n
к повторному элементу работало для меня. Таким образом, если у вас есть 2 столбца, это будет 1/2, если 3 будет 1/3 и так далее.
Надеюсь, что это помогает другим.
Я сделал бы часть SQL, не делая форматирования, затем сделал бы форматирование на стороне клиента:
var items = list.MyItems.Select(item => new { item.ID, item.Sector, item.Description,
item.CompleteDate, item.DueDate })
.AsEnumerable() // Don't do the next bit in the DB
.Select(item => new { item.ID, item.Sector, item.Description,
CompleteDate = FormatDate(CompleteDate),
DueDate = FormatDate(DueDate) });
static string FormatDate(DateTime? date)
{
return date.HasValue ? date.Value.ToShortDateString() : ""
}
В первом запросе Вы уже вернули данные из базы данных к этому времени вторые выполнения строки (объекты var =...). Это означает, что 2-я строка работает в клиенте, куда ToShortDateString может работать вполне счастливо.
Во втором запросе, потому что выбор работает непосредственно на наборе IQueryable (dataContext. MyLists), это пытается перевести выбор в SQL для обработки в сервере, где ToShortDateString не понят - следовательно, "Не Мог Перевести.." исключение.
Для понимания этого немного лучше действительно необходимо понять различие между IQueryable и IEnumerable, и в которой точке Linq К запросу SQL прекращает быть IQueryable и становится IEnumerable. Существует много материала в сети об этом.
Надеюсь, это поможет,
Paul
Точно так же, как сообщение об ошибке говорит Вам, различие происходит из-за того, что может быть сделано локально стихи удаленно при соединении с SQL.
Код Linq должен быть преобразован Linq в SQL в команду SQL для получений по запросу удаленных данных - что-либо, что должно быть сделано, локально не может быть включен.
После того как Вы вытянули его в локальный объект (в первом примере), это не использует Linq для SQL больше, просто Linq. В той точке Вы свободны сделать локальные манипуляции на нем.
Возможно, была ошибка копии и вставки или просто опечатка в Вашем образце. Но в противном случае это могло бы быть проблемой...
Во втором запросе Вы запрашиваете набор списков, тогда как в первом запросе Вы запрашивали объекты в рамках списка. Но Вы не скорректировали запрос для составления этого различия.
То, в чем Вы нуждаетесь, могло бы быть этим. Отметьте прокомментированные строки, которые не появились в Вашем втором образце.
var items = from aList in dataContext.MyLists
from i in aList.MyItems // Access the items in a list
where aList.ID == myId // Use only the single desired list
select
new
{
i.ID,
i.Sector,
i.Description,
CompleteDate = i.CompleteDate.HasValue ? i.CompleteDate.Value.ToShortDateString() : "",
DueDate = i.DueDate.HasValue ? i.DueDate.Value.ToShortDateString() : ""
};
ToShortDateString ()
не поддерживается Linq to SQL http://msdn.microsoft.com/en-us/library/ bb882657.aspx