无法将类型'System.Linq.IQueryable'隐式转换为'System.Collections.Generic.IList'

时间:2010-08-04 05:21:23

标签: c# .net linq exception-handling linq-to-entities

我有一个方法:

public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname)
{
    DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities();
    DzieckoAndOpiekunCollection result = new DzieckoAndOpiekunCollection();
    if (firstname == null && lastname != null)
    {
        IList<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                      where lastname == p.Nazwisko
                      **select** new DzieckoAndOpiekun(
                     p.Imie,
                     p.Nazwisko,
                     p.Opiekun.Imie,
                     p.Opiekun.Nazwisko)
                  ;
        result.AddRange(resultV);
    }
    return result;
}

和所选地点的错误:

  

错误1无法隐式转换类型'System.Linq.IQueryable&lt; WcfService1.DzieckoAndOpiekun&gt;'到'System.Collections.Generic.IList&lt; WcfService1.DzieckoAndOpiekun&gt;'。存在显式转换(您是否错过了演员?)

任何想法如何解决我的问题?

7 个答案:

答案 0 :(得分:48)

要将IQuerableIEnumerable转换为列表,您可以执行以下操作之一:

IQueryable<object> q = ...;
List<object> l = q.ToList();

或:

IQueryable<object> q = ...;
List<object> l = new List<object>(q);

答案 1 :(得分:10)

您可以将IList<DzieckoAndOpiekun> resultV替换为var resultV

答案 2 :(得分:4)

如果您不想使用IQueryable对象,如果使用where子句,请务必包含.First()

答案 3 :(得分:3)

试试这个 - &gt;

 new DzieckoAndOpiekun(
                         p.Imie,
                         p.Nazwisko,
                         p.Opiekun.Imie,
                         p.Opiekun.Nazwisko).ToList()

答案 4 :(得分:2)

在linq查询之后,您可以使用.ToList()方法将返回的IQueryable结果转换为IList,如下所示。

   public DzieckoAndOpiekunCollection GetChildAndOpiekunByFirstnameLastname(string firstname, string lastname)
{
    DataTransfer.ChargeInSchoolEntities db = new DataTransfer.ChargeInSchoolEntities();
    DzieckoAndOpiekunCollection result = new DzieckoAndOpiekunCollection();
    if (firstname == null && lastname != null)
    {
        IList<DzieckoAndOpiekun> resultV = from p in db.Dziecko
                      where lastname == p.Nazwisko
                      **select** new DzieckoAndOpiekun(
                     p.Imie,
                     p.Nazwisko,
                     p.Opiekun.Imie,
                     p.Opiekun.Nazwisko).ToList()
                  ;
        result.AddRange(resultV);
    }
    return result;
}

答案 5 :(得分:1)

我已经通过这种方式解决了我在db上的记录列表中的问题

require_once( 'wp-includes/wp-db.php' );

答案 6 :(得分:0)

SonarQube报告了Return an empty collection instead of null.,我对此问题的标题有疑问,例如转换。 我能够在使用return XYZ.ToList().AsQueryable();的方法中仅使用IQueryable来摆脱这两种情况:

public IQueryable<SomeType> MethodName (...) {
  IQueryable<SomeType> XYZ;
  ...
  return XYZ.ToList().AsQueryable();
}

希望如此对类似情况的人有帮助。