2013-12-18 1 views
0

Я знаком с t-sql, но не в LINQ, я пробовал базовый linq, но не уверен в этом. Я не уверен, есть ли точный эквивалент в linq в моем письменном заявлении sql ниже. В основном я хочу перенести результат linq на мою модель домена.Преобразование T-SQL (отдельный, groupby, union) в LINQ

SQL-запроса используют один и тот же вид (вид 1 SQL)

Домен Модель

Public class Result 
{ 
Public int Key{get;set;} 
Public string Name{get;set;} 
} 

SQL Query

SELECT DISTINCT Name = Field1 ,ItemKey = Field2 FROM sql_view 
UNION 
SELECT DISTINCT Name = Field3 ,ItemKey = Field4 FROM sql_view 
UNION 
SELECT DISTINCT Name = Field5 ,ItemKey = Field6 FROM sql_view 
UNION 
SELECT Name = Field7 ,ItemKey = Field8 FROM sql_view 

Примеры Данные sql_vw

Field1 Field2 Field3 Field4 Field5 Field6 Field7 Field8 
1  A1  23  FF23  322 ZZ322  10 A10 
1  A1  23  FF23  322 ZZ322  21 R21 
1  A1  23  FF23  322 ZZ322  31 E31 
2  B2  22  PP22  331 WW331  3 A3 
2  B2  22  PP22  331 WW331  7 R7 
2  B2  22  PP22  331 WW331  9 E9 
2  B2  22  PP22  331 WW331  12 E12 
3  C3  26  HH26  340 NN340  43 H43 
3  C3  26  HH26  340 NN340  39 J39 
+0

Как вы получаете Diff значения от имени и ItemKey в том же sql_view? –

+0

Я хотел, чтобы они были только в 2 столбцах (Itemkey и Name). Каждый из моих операторов select использует разные поля (field1, field2). Образец данных, которые я опубликовал, был результатом sql_view, но вывод моего запроса sql будет состоять из 2 столбцов. –

ответ

0
(from v in context.View 
group v by new {v.Field1, v.Field2} into g 
select new Result{Key = g.Key.Field1, Item = g.Key.Field2}) 
.Union()//more of this may be 

Обновлено с группировкой

+0

. Я пробовал то, что вы сделали и добавил на последней части кода, но все еще повторяется .Union ( от v3 в obj Выбрать новый Результат {Name = v.Field7, Key = v.Field8} )). Distinct(). ToList(); –

+0

Что делать, если вы добавляете .Distinct() в каждой части запроса –

+0

Я тоже пробовал этот, но все еще повторяется, я думаю, что это похоже на выполнение всех столбцов, как в sql-SELECT DISTINCT field1, field2 ~ field8 FROM таблицу, вы заметите, что мое поле 8 в моих данных образца не имеет дубликатов –

0

Для делает вещи проще читать и понимать, я хотел бы сделать что-то вроде этого

var part1 = context.View.Select(m => new {Name = m.Field1, ItemKey = m.Field2}); 
var part2 = context.View.Select(m => new {Name = m.Field3, ItemKey = m.Field4}); 
var part3 = context.View.Select(m => new {Name = m.Field5, ItemKey = m.Field6}); 
var part4 = context.View.Select(m => new {Name = m.Field7, ItemKey = m.Field8}); 

var result = (part1.Union(part2).Union(part3).Union(part4)).Distinct(); 
+0

Я пробовал, что и то же самое произойдет, количество записей в 1-й части будет отсчитывать количество всех запросов. не знаю почему. –

+0

@VincentEchavez Ну, с вашим образцом, part1, 2 и 3 будет иметь 3 результата. part4 будет иметь 9 результатов.Таким образом, у вас должно быть 18 строк в конце. Отредактировано, чтобы включить part4. –

+0

Я пробовал свой код, и я просто использую класс модели, а не анонимный тип, у выхода есть дубликаты, –