2011-08-19 3 views
5

У меня эти две строки, которые делают то же самое. Но написаны по-разному. Что является лучшей практикой и почему?Какой метод лучше использовать LINQ?

firstRecordDate = (DateTime)(from g in context.Datas 
            select g.Time).Min(); 

firstRecordDate = (DateTime)context.Datas.Min(x => x.Time); 
+2

Я подозреваю, что это случай личных предпочтений. Я лично считаю, что второй яснее и проще, но я уверен, что другие думают наоборот. Я уверен, что кто-то сможет подтвердить, скомпилируют ли они то же самое или нет. :) – Chris

ответ

6

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

http://msdn.microsoft.com/en-us/library/bb397947.aspx

Также смотрите здесь: .NET LINQ query syntax vs method chain

Она сводится к тому, что вы комфортно и то, что вы найдете более читаемым.

+0

+1 интересный маленький читать. –

1

Вторые используют выражения lambda. Мне это нравится, так как оно компактно и легко читается (хотя некоторые из них найдут, что первое легче читать).

Кроме того, первое лучше подходит, если у вас есть фон SQL.

1

Я бы сказал, что вы читаете то, что наиболее читаемо или понятно для вашей команды разработчиков. Вернись в год или около того и посмотреть, если вы можете помнить, что LINQ ... ну, это особенно LINQ, очевидно, просто так, что это спорный вопрос :-)

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

1

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

1

Нет абсолютно никакой разницы в результатах, если вы действительно пишете эквивалентные утверждения в каждом формате.

Перейти к наиболее читаемому для любого заданного запроса. Сложные запросы с объединениями и многие, где предложения и т. Д. Часто легче писать/читать в синтаксисе запроса linq, но действительно простые, такие как context.Employees.SingleOrDefault(e => e.Id == empId), проще использовать синтаксис цепочки методов. Нет общего правила «один лучше», и у двух людей может быть разница во мнениях по любому данному примеру.

1

Между этими двумя утверждениями нет семантической разницы. Который вы выбираете, это чисто вопрос предпочтения стиля

1

Вам нужен явный листинг в любом из них? Не время ли уже DateTime?

Лично я предпочитаю второй подход, поскольку я нахожу синтаксис метода расширения более знакомым, чем синтаксис LINQ, но это действительно личное предпочтение, они выполняют то же самое.

Второй, написанный более точно, как первый, будет context.Datas.Select(x => x.Time).Min().Таким образом, вы можете увидеть, как вы написали его с Min(x => x.Time), возможно, немного более эффективным, потому что у вас есть только операция, а не две.

1

Синтаксис понимания запроса фактически скомпилирован до серии вызовов методов расширения, что означает, что два синтаксиса семантически идентичны. Какой бы стиль вы ни выбрали, это тот, который вы должны использовать.

Смежные вопросы