Keine generische Methode 'Where' Typ 'System.Linq -.Queryable " ist kompatibel mit den mitgelieferten Typ-Argumente und Argumente

Möchte ich abrufen eines bestimmten Datensatzes mit IQueryable. Aber ich bekomme die Fehlermeldung 'Keine generische Methode 'Where' Typ 'System.Linq -.Queryable " ist kompatibel mit den mitgelieferten Typ-Argumente und Argumente. Keine Typ-Argumente sollten bereitgestellt werden, wenn die Methode ist nicht-generische.'. Ich habe die ausgewählten Zeilen-id, aber ich kann nicht es heraus. Hier ist mein code.

 internal static IQueryable GetRecordsFromPrimaryKeys(this IQueryable datasource, List<FilterDescriptor> primaryKeys)
    {
        IQueryable data = datasource;

        ParameterExpression paramExp = null;
        bool firstLoop = false;
        System.Linq.Expressions.Expression predicate = null;

        var RecordType = datasource.GetObjectType();
        paramExp = RecordType.Parameter();

        foreach (FilterDescriptor primaryKey in primaryKeys)
        {
            if (!(firstLoop))
            {
                predicate = data.Predicate(paramExp, primaryKey.ColumnName, primaryKey.Value, FilterType.Equals, false, RecordType);
                firstLoop = true;
            }
            else
            {
                predicate = predicate.AndPredicate(data.Predicate(paramExp, primaryKey.ColumnName, primaryKey.Value, FilterType.Equals, false, RecordType));
            }
        }

        if (paramExp != null && predicate != null)
        {
            var lambda = Expression.Lambda(predicate, paramExp);
            data = data.Provider.CreateQuery(
                       Expression.Call(
                       typeof(Queryable),
                       "Where",
                       new Type[] { data.ElementType },
                       data.Expression,
                       lambda
                       )
                   );

        }

        return data;
    }

Mein Code funktioniert gut für IEnumerable/IQueryable/ICollection . Aber es wirft die Ausnahme, wenn ich geben Sie die Klasse mit dem Schlüsselwort virtual und Typ ICollection. Mein code ist

public class RoomType
{
    public int ID { get; set; }

    [MaxLength(10, ErrorMessage = "Room code cannot be longer than 10 characters.")]
    public string Code { get; set; }

    [MaxLength(50, ErrorMessage = "Room name cannot be longer than 50 characters.")]
    public string Name { get; set; }

    public virtual ICollection<RoomCategory> RoomCategories { get; set; }
}

Einige zufällige Werte wird angehängt 'RecordType', während mit dem keyword "virtuelles". Ich denke, das führt zu der Ausnahme. Noch auf der Suche nach der Lösung.

Ich weiß nicht, was schief läuft . Irgendwelche Vorschläge willkommen.

Dank.

Ich denke, dein code sollte funktionieren. Sind Sie sicher, dass alle Ihre Arten entsprechen?

InformationsquelleAutor RGR | 2011-11-10

Schreibe einen Kommentar