Анонимный тип появляется в обеих ошибках

У меня есть запрос linq, который заполняет GridView на Page_Load. Я сделал цикл for символов для алфавита. В .Command LinkButton, который заполняет LinkButton, я запускаю очень похожий запрос, используя те же параметры в запросе и получая следующую ошибку.

Тип '< > f__AnonymousType2' существует как в "ConcernContracts.dll", так и в System.Web.WebPages.Deployment.dll '

void lnkCharacter_Command(object sender, CommandEventArgs e)
{
    try
    {
        var lbtn = (LinkButton)lbl_Alphabet.FindControl("lnkCharacter" + e.CommandArgument);
        var id = lbtn.Text;

        using (var db = new dbDataContext())
        {
            var query = from n in db.tbl_Providers
                        where ((n.provider_Name.StartsWith(id)) && (n.provider_Deleted == false))
                        select new
                        {
                            n.ProviderId,
                            n.provider_Name
                        };

            grd_Provider.DataSource = null;
            grd_Provider.DataSource = query;
            grd_Provider.DataBind();
        }
    }
    catch (SystemException ex) { }
}

LoadGrid() тот же, но он не использует условие .StartsWith(). У вас есть идеи, как решить эту ошибку?

Ошибка не генерирует исключение, но она не заполняет сетку ни для одного из запросов. Ошибка была обнаружена в следующей строке: grd_Provider.DataSource = query;

Ответ 1

Измените источник данных сетки

grd_Provider.DataSource = query.ToList();
grd_Provider.DataBind();

или создать Список, имеющий два свойства Идентификатор поставщика и Имя и связать этот список с выходом как это.

 List<Entities> abc=query.ToList();
 grd_Provider.DataSource =abc;
 grd_Provider.DataBind();

Ответ 2

Вот предложение:

Два похожих запроса, вероятно, перекрываются с тем анонимным типом, который вы выбираете в запросе LINQ. В одном и только одном из запросов измените выбранный новый, чтобы он выглядел следующим образом:

select new
       {
         Id = n.ProviderId,
         Name = n.provider_Name
       };

Если вы это сделаете, анонимные типы больше не должны конфликтуют, так как тот, который вы не изменяете, будет использовать имена по умолчанию.

Удачи, и я надеюсь, что это поможет!

Ответ 3

Преобразуйте его в List или IEnumberable, вы просто не можете передавать анонимные объекты как datasource в gridview. query.ToList();

Вы можете преобразовать возвращаемый тип в

IEnumerable<object>

он может содержать любой анонимный тип и легко связывается как datasource

Ответ 4

У меня была такая же проблема, и я добавил другое свойство анонимному типу и решил его.

Ответ 5

Linq не поддерживает некоторые функции, такие как .toDays(), addDays(), StartsWith(). Итак, что вам нужно сделать, сначала получите результат без использования .StartsWith(), затем попытайтесь применить некоторые функции для фильтрации результата StartsWith perticular id.