Linq “Не мог перевести выражение … в SQL и не мог рассматривать его как локальное выражение”.

Это зависит от того, если Вы говорите о федеральном правительстве или местных органах власти, но ответы являются тем же.

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

  • правительства являются медленными при адаптации к новым тенденциям. Это дизайном, Вы хотите, чтобы правительство было стабильно. Хранение со статус-кво покупки собственного программного обеспечения является более безопасным выбором для правительства.

  • Программное обеспечение с открытым исходным кодом было вокруг в течение долгого времени, но критическая масса должна была поддерживать его в широком смысле (т.е., есть ли достаточно большой кадровый потенциал в моей области для найма людей для поддержки этой новой технологии), является довольно новым.

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

Для последующего вопроса:

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

  • правительство действительно имеет права. Это - юридическое лицо, которое заключает юридически обязательные контракты. Это необходимо для правительств для функционирования с частным сектором. Правительство содержало бы лицензию (как пример).

10
задан Community 23 May 2017 в 11:33
поделиться

3 ответа

Вы можете использовать AsEnumerable для объекта, но это заставит его вернуть все столбцы (даже если они не используются); возможно, вместо этого что-то вроде:

var q1 = from ent in LinqUtils.GetTable<Entity>()
         from tel in ent.Telephones.DefaultIfEmpty()
         select new {
           Name = ent.FormattedName,
           Number = (tel == null ? null : ent.Number),
           Extension = (tel == null ? null : ent.Extension)
         };

var q2 = from row in q1.AsEnumerable()
         select new {
             row.Name,
             FormattedNumber = FormatNumber(row.Number, row.Extension)
         };

где FormatNumber - это некоторый метод, который берет два и объединяет их, предположительно повторно используемый из вашего другого кода (свойства).

С LINQ-to-SQL другой вариант - предоставить UDF в контексте данных, который выполняет форматирование внутри базы данных; немного другой пример:

var qry = from cust in ctx.Customers // and tel
          select new {
              cust.Name,
              FormattedNumber = ctx.FormatNumber(tel.Number, tel.Extension)
          };

(который будет выполнять работу с базой данных; хорошая идея или нет ;-p)

13
ответ дан 3 December 2019 в 21:22
поделиться

В настоящее время нет возможности сделать это с помощью стандартного подключаемого модуля. Вы можете создать плагин для чтения findbugsChecks.xml и вывода необходимой информации.

Приведенный ниже код выведет общее количество обнаруженных ошибок и ошибок для каждого пакета для любого проекта с findbugsChecks.xml в выходном каталоге. Вы можете настроить имя файла, который он читает, установив свойство findBugsChecks в конфигурации:

package name.seller.rich;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;

/**
 * @goal stats
 */
public class FindbugsStatsMojo extends AbstractMojo {

    /**
     * Where to read the findbugs stats from
     * 
     * @parameter expression="${findbugsChecks}"
     *            default-value="${project.build.directory}/findbugsCheck.xml"
     */
    private File findbugsChecks;

    /**
     * Output the Findbus stats for the project to the console.
     */
    public void execute() throws MojoExecutionException, MojoFailureException {
        if (findbugsChecks != null && findbugsChecks.exists()) {
            try {
                Xpp3Dom dom = Xpp3DomBuilder.build(new FileReader(
                        findbugsChecks));

                // get the summary and output it
                Xpp3Dom summaryDom = dom.getChild("FindBugsSummary");

                // output any information needed
                getLog().info(
                        "Total bug count:"
                                + summaryDom.getAttribute("total_bugs"));

                Xpp3Dom[] packageDoms = summaryDom.getChildren("PackageStats");

                getLog().info(packageDoms.length + " package(s)");
                for (int i = 0; i < packageDoms.length; i++) {
                    String info = new StringBuilder().append("package ")
                            .append(packageDoms[i].getAttribute("package"))
                            .append(": types:").append(
                                    packageDoms[i].getAttribute("total_types"))
                            .append(", bugs:").append(
                                    packageDoms[i].getAttribute("total_bugs"))
                            .toString();
                    getLog().info(info);
                }
            } catch (FileNotFoundException e) {
                throw new MojoExecutionException(
                        "Findbugs checks file missing", e);
            } catch (XmlPullParserException e) {
                throw new MojoExecutionException(
                        "Unable to parse Findbugs checks file", e);
            } catch (IOException e) {
                throw new MojoExecutionException(
                        "Unable to read Findbugs checks file", e);
            }
        }
    }
}

Чтобы упаковать этот код, добавьте его в папку src / main / java проекта Maven с POM следующим образом:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>name.seller.rich</groupId>
  <artifactId>maven-findbugs-stats-plugin</artifactId>
  <packaging>maven-plugin</packaging>
  <version>0.0.1</version>
  <dependencies>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-core</artifactId>
      <version>2.2.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.maven</groupId>
      <artifactId>maven-plugin-api</artifactId>
      <version>2.2.0</version>
    </dependency>
  </dependencies>
</project>

Затем запустите mvn install , чтобы установить подключаемый модуль.

Чтобы использовать его, вы можете запустить его в качестве дополнительной цели в командной строке или привязать к своему проекту для запуска в рамках стандартного жизненного цикла.

Здесь ' Спасибо всем!

1
ответ дан 3 December 2019 в 21:22
поделиться

Чистый способ - указать поля, которые вы действительно хотите в выражении, поместить их в объекты среднего уровня, а затем использовать любые вспомогательные функции для их последующего изменения.

Я не уверен, понимаете ли вы, что класс, представляющий таблицу SQL для LINQ, является классом DTO - он определяет грамматику, используемую транслятором LINQ-SQL. Внедрение свойства в DTO, которое не сопоставлено с таблицей SQL, даже не поддерживается - это означает, что переводчик может запускаться по желанию. Атрибуты определяют грамматику, и ничего, что не определено ими, не существует для переводчика выражений.

Сущности, указанные в предложении from, не являются объектами - это просто символы, используемые для помощи в написании фактических полей таблицы, которые будут извлечены. Поле, не названное явно в select, - это поле, которое не извлекается - по крайней мере, это цель переводчика, возможно, ему придется пропустить несколько. Например, если это ent.FormattedName не объявлено, это промах и может взорваться позже.

Итак, свойство FormattedNumber, внедренное в класс DTO, даже не существует в грамматике. Это не «вычисляемое поле» - этот термин предназначен строго для определений таблиц SQL, и если бы он у вас был, он был бы в грамматике DTO.Обратите внимание, что в ошибке очень точно сказано «локальное выражение» - очень ограниченный объем.

Вы можете попытаться обмануть его с помощью вложенного лямбда-выражения, вызывающего статическую функцию для всего «tel», что может вызвать выборку всей записи или выброс другого исключения.

Другие LINQ-ы, не являющиеся трансляторами, могут иметь менее строгие правила. LINQ-SQL должен быть либо очень строгим, либо очень медленным, и он уже достаточно медленный: -)

3
ответ дан 3 December 2019 в 21:22
поделиться
Другие вопросы по тегам:

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