2012-02-07 2 views
0

Я создал один метод в моей модели:Не может неявно преобразовать тип динамического LINQ к SQL

public IList<Test> GetData(int IDCus){ 

var list = from j in Context.Test 
join y in this.Context.Test1 on j.ID equals y.ID 
where j.ID == IDCus 
select new { 
    Tnum = j.Ynum, 
    Level = y.Level 
}; 
    return list.ToList(); 
} 

Когда я только с помощью select без new, он работает нормально. Но когда я попытался использовать select new в моем запросе, это ошибка: Невозможно неявно преобразовать тип System.Collections.Generic.List<AnonymousType#1> в System.Collections.Generic.IList<ITEX.Models.Test>.

Любые подсказки? Благодарю.

+0

Ошибка говорит сама, вы возвращаете IList , но когда вы делаете новые с помощью select, вы создаете анонимный тип, который не является «Test» – Flowerking

+0

Thank. но не могли бы вы рассказать мне, почему вы сказали, я создаю анонимный тип, а не тест? Поскольку j.Ynum - это поле, которое я беру из таблицы «Тест» и y.Level, беру из таблицы Test1. – Nothing

+1

Когда вы используете «select», как указано выше, вы проецируете свой результат на новый «Тип», который был анонимно создан компилятором (функция C# 3.0). Чтобы указать тип, к которому вы хотите вернуться, вам нужно использовать - выберите новый Test() {Tnum = j.Ynum, Level = y.Level}, это гарантирует, что вы возвращаете объект Test вместо создания нового анонимного тип. – Flowerking

ответ

1

Если оба Ynum и Level являются ИНТ вы должны сначала проверить, что класс Test выглядит следующим образом:

public class Test 
{ 
    public int Tnum { get; set; } 
    public int Level {get;set;} 
} 

И тогда запрос должен выглядеть следующим образом:

public IList<Test> GetData(int IDCus) 
{ 
    var list = (
       from j in Context.Test 
       join y in this.Context.Test1 
        on j.ID equals y.ID 
       where 
        j.ID == IDCus 
       select new Test() 
        { 
         Tnum = j.Ynum, 
         Level = y.Level 
        } 
      ); 
    return list.ToList(); 
} 

Если вы используют Test где-то еще, вам может понадобиться создать новый класс для этого вызова, мы можем назвать его Test2. Тогда класс должен выглядеть следующим образом:

public class Test2 
{ 
    public int Tnum { get; set; } 
    public int Level {get;set;} 
} 

и функция для получения информации должен выглядеть следующим образом:

public IList<Test2> GetData(int IDCus) 
{ 
    var list = (
       from j in Context.Test 
       join y in this.Context.Test1 
        on j.ID equals y.ID 
       where 
        j.ID == IDCus 
       select new Test2() 
        { 
         Tnum = j.Ynum, 
         Level = y.Level 
        } 
      ); 
    return list.ToList(); 
} 

Я надеюсь, что это поможет

+0

Хорошо работает. Благодарю. – Nothing

+0

Рад помочь ... – Arion

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