Выражение лямбда: метод не может быть переведен в выражение хранилища [дубликат]

Поскольку этот ответ стал довольно популярным, я его значительно переписываю.

Давайте не будем забывать вопрос, который был задан:

Как удалить пространство между элементами встроенного блока? Я надеялся на решение CSS, которое не требует, чтобы исходный код HTML был подделан. Можно ли решить эту проблему только с помощью CSS?

Это является возможным решить эту проблему только с помощью CSS, но полностью надежные исправления CSS.

Решение, которое у меня было в моем первоначальном ответе, состояло в том, чтобы добавить font-size: 0 к родительскому элементу, а затем объявить разумные font-size для детей.

http://jsfiddle.net/thirtydot/dGHFV/1361/

Это работает в последних версиях всех современных браузеров. Он работает в IE8. Он не работает в Safari 5, но работает в Safari 6. Safari 5 почти мертвый браузер ( 0,33%, август 2015 ).

Большинство возможных проблем с относительными размерами шрифтов затруднительно исправить.

Однако, хотя это разумное решение, если вы специально нуждаетесь в , только исправление CSS, это не что я рекомендую, если вы можете изменить свой HTML-код (как и большинство из нас).


Это то, что я, как опытный веб-разработчик, действительно делаю для решения этой проблемы: / g25]

FooBar

Да, это так. Я удаляю пробелы в HTML между элементами встроенного блока.

Это легко. Это просто. Он работает повсюду. Это прагматическое решение.

Иногда вам приходится тщательно учитывать, откуда будет проходить пробел. Будет ли добавлен другой элемент с JavaScript, добавьте пробел? Нет, если вы сделаете это правильно.

Давайте продолжим волшебное путешествие по различным способам удаления пробелов, с некоторым новым HTML :

  • Item 1
  • Item 2
  • Item 3
  • Вы можете сделать это, как обычно:
    • Item 1
    • Item 2
    • Item 3
    http://jsfiddle.net/thirtydot/dGHFV/1362/
  • Или, это:
    • Item 1
    • Item 2
    • Item 3
  • Или, используйте комментарии:
    • Item 1
    • Item 2
    • Item 3
  • Или, вы можете даже пропустить некоторые закрывающие теги целиком (все браузеры в порядке с этим):
    • Item 1
    • Item 2
    • Item 3

Теперь, когда я ушел и надоел вам до смерти «тысячей разных способов удалить [29] В качестве альтернативы вы теперь можете использовать flexbox для достижения многих макетов, которые вы можете использовать ранее использовали встроенный блок для: https://css-tricks.com/snippets/css/a-guide-to-flexbox/

74
задан abatishchev 19 June 2013 в 20:32
поделиться

1 ответ

Причина. По дизайну LINQ to Entities требуется, чтобы все выражение запроса LINQ было переведено на запрос сервера. Только несколько некоррелированных подвыражений (выражения в запросе, которые не зависят от результатов от сервера) оцениваются на клиенте до того, как запрос будет переведен. Произвольные вызовы метода, которые не имеют известного перевода, такие как GetHomeFeatures () в этом случае, не поддерживаются. Чтобы быть более конкретным, LINQ to Entities поддерживает только конструкторы Parameterless и Initializers . Решение. Поэтому, чтобы преодолеть это исключение, вам нужно объединить свой дополнительный запрос в основной для g7 GetCommunityFeatures () и GetHomeFeatures () вместо прямого вызова методов изнутри LINQ запрос. Кроме того, существует проблема в том, что вы пытались создать экземпляр LazyList , используя его конструкторы с параметрами, как вы могли бы сделать в LINQ to SQL , Для этого решением было бы перейти на оценку клиентов запросов LINQ (LINQ to Objects). Это потребует, чтобы вы вызывали метод AsEnumerable для ваших запросов LINQ to Entities до вызова конструктора LazyList. Что-то вроде этого должно работать:

public IQueryable<Models.Estate> GetEstates()
{
    return from e in entity.Estates.AsEnumerable()
       let AllCommFeat = from f in entity.CommunityFeatures
                         select new CommunityFeatures {
                             Name = f.CommunityFeature1,
                             CommunityFeatureId = f.CommunityFeatureId
                         },
       let AllHomeFeat = from f in entity.HomeFeatures
                         select new HomeFeatures() {
                             Name = f.HomeFeature1,
                             HomeFeatureId = f.HomeFeatureId
                         },
       select new Models.Estate {
            EstateId = e.EstateId,
            AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat),
            AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat)
       };
}

Дополнительная информация: посмотрите LINQ to Entities, что не поддерживается? для получения дополнительной информации , Также проверьте LINQ на Entities, Обходные решения на том, что не поддерживается , для подробного обсуждения возможных решений. (Обе ссылки - это кешированные версии, поскольку исходный веб-сайт не работает)

102
ответ дан Marcus Mangelsdorf 25 August 2018 в 13:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: