Рейтинг:
2
BillWoodruff
Вот вам догадываться на то, что вам может понадобиться сделать:
private DocumentationLink getadl(AContext ctx, APIDocumentationTypes a)
{
var adl = ctx.APIDocumentationTypes.Where(x => x.DocumentationTypeId == a.DocumentationTypeId)
.Select(x => x.DocumentationDescription.ToLower())
.FirstOrDefault(
descr => !(descr == "value1" || descr == "value2")
);
// what is the default Type here if no match is found ?
return (adl == "") ? null : a.DocumentationLink;
}
Конечно, вы можете создать "промежуточные" переменные в запросе Select, если это необходимо/
DGKumar
Спасибо за ваше ценное предложение.
Мне нужно включить значение результата в свойство, как показано ниже.
результат = из tbl в Data1
выберите (новый APIProp {
DocumID=tbl.ID,
DocumentationLink = контекст.APIDocs.Где (x => x.DocuId == tbl.DocuId).Выберите (x => x. описание).Метода firstordefault().ToLower () ! = "Value1"? tbl.DocumentationLink : ""
}).Где(Х => У Х.DocumentationId == идентификатора docid).Список();
при проверке одного и того же свойства более чем на 1 значение
Рейтинг:
1
OriginalGriff
Попробуй:
string result = context.APIDocumentationTypes.Where(x => x.DocumentationTypeId == a.DocumentationTypeId)
.Select(x => x.DocumentationDescription)
.FirstOrDefault().ToLower();
DocumentAtionLink = ( result != "value1" && result != "value2") ? a.DocumentationLink : "";
Но обратите внимание, что
FirstOrDefault
будет возвращать
null
если нет элементов, которые соответствовали бы вашему
Select
- в какой момент ваш
ToLower
вызов вызовет
NullReferenceException
.
BillWoodruff
Привет, я продолжаю видеть этот вызов 'Firstordefault без предиката, за которым следует' ToLower, как гарантированную ошибку. Я что-то пропустил ?
OriginalGriff
FirstOrDefualt не нуждается в предикате / лямбда-выражении - он просто возвращает первое из перечисляемой последовательности или null, если коллекция пуста.
Поскольку Select, который предшествует ему, возвращает коллекцию строк IEnumerable (или она не может быть сравнена в его исходном коде со строкой), вы можете вызвать ToLower для нее.
Что касается меня, то я бы опустил ToLower до тех пор, пока не проверил нулевое возвращение, но ваше решение использовать его внутри Select lambda столь же эффективно (поскольку вся последовательность не вычисляется с помощью FirstOrDefault, поэтому она не генерирует нежелательные строки для каждого элемента).
[edit]FirstOrDefualt может взять лямбду. конечно.[/редактировать]
OriginalGriff
:dох: смерть мозга является параметром метода firstordefault *может* принять предикат, конечно, может. :вздох:
BillWoodruff
Мой мозг поврежден сильнее, чем ваш, и у меня есть годы пробега по моим нейронам, чтобы доказать это :)
У меня сложилось впечатление, что ОП хочет повторить совпадения для x.DocumentationTypeId == a.DocumentationTypeId).Выберите (x =>x. DocumentationDescription, а затем найдите первый в этом IEnumerable & lt;ocumentationdescription>, который не совпадает с "value1" и " value2"