Я конвертирую приложение ADO.NET для использования Entity Framework 5 и сталкиваюсь с проблемой при повторной записи функции поиска. Я отделил уровень пользовательского интерфейса и БД, уровень БД теперь имеет внутренний edmx и предоставляет методы поиска данных.Результаты фильтрации с помощью LINQ
Один такой способ - поиск. Поскольку функция больше не имеет доступ к образованию контрольных значений непосредственно (Там раньше была LINQ запроса на пользовательском интерфейсе файла кода) Я создал класс, чтобы разрешить форму, чтобы передать эти значения через
public class SearchParameter
{
public string Name { get; set; }
public bool Checked { get; set; }
public object Value { get; set; }
}
I знаю, что это приводит к боксу значение, но я не мог видеть любой другой способ, чтобы позволить нескольким типам значений
функция поиска выглядит следующим образом
public static IList SearchRecords(IList<SearchParameter> searchParams)
{
using (var db = new EarnieEntities())
{
var result = db.Non_Conformance;
//Filter Results based on params
foreach (var p in searchParams.Where(p => p.Checked))
{
switch (p.Name)
{
case "NCID":
break;
case "DateRaised":
break;
case "RaisedBy":
break;
case "RaisedFor":
break;
}
}
return result.ToList();
}
}
с помощью LINQ к SQL с каждым из этих КАС эс я мог бы написать что-то вроде этого, чтобы фильтровать результат по этому полю
result = result.Where(x => x.NC_ID == (int) p.Value).Select(x => x);
Идея при использовании LINQ для SQL было использовать отложенную загрузку и позволить всем фильтрации до того были доступны результаты. Это позволяет пользователям выбирать поля в пользовательском интерфейсе и строить критерии поиска.
С EF, я получаю
Вы не можете преобразовать тип источника Linq.IQueryable < Типа> целевого типа Data.Entity.DbSet < Тип>
Есть еще один способ сделать такая фильтрация?
[Update]
Если я пытаюсь просто привести результат к DbSet я получаю другую ошибку
Невозможно привести объект типа «System.Data.Entity.Infrastructure.DbQuery
1[EarnieDAL.Sources.Non_Conformance]' to type 'System.Data.Entity.DbSet
1 [EarnieDAL.Sources.Non_Conformance]
К сожалению, я не могу проверить это сейчас, но что, если заменить «результат вар = db.Non_Conformance;» с var 'result = db.Non_Conformance.Select (x => x);' – Uriil
* facepalm * Попробуем сейчас, но я считаю, что это – James
Большое спасибо Uriil, Spot on. – James