C#中的IQueryable参考问题

Bas*_*rdo 0 c# linq reference

码:

public static IQueryable GetAllBy_HesapAdiFirmaAdiCariNo_Turu_bypage_short(string filter, string tip, int page_size, int page_index, string sortcolumn, bool sortdirection)
{
    //bool tip: 0-tümü, 1-son kullanici, 2-bayi, 3- tedarikçi
    VeriyazDBDataContext db = new VeriyazDBDataContext(); db.Connection.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
    var cariKayitlari = DAL.DAOCari.SelectAll();
    var kayitlar = (from rows in cariKayitlari
                    where rows.HESAPADI.ToLower().Contains(filter.ToLower()) ||
                        (rows.CARITURU == "Bireysel" ? rows.B_ADSOYAD.ToLower().Contains(filter.ToLower()) : 
                                                        rows.K_FIRMAADI.ToLower().Contains(filter.ToLower())) ||
                        (rows.CARITURU == "Bireysel" ?
                        rows.B_ADSOYAD.ToLower().Contains(filter.ToUpper()) :
                        rows.K_FIRMAADI.ToLower().Contains(filter.ToUpper())) ||                                   
                        rows.ID.ToString().Contains(filter)
                    select rows);

    switch (tip)
    {
        case ("Tümü"):
        default:
        {
            break;
        }
        case ("Son Kullanici"):
        {
            kayitlar = kayitlar.Where(rows => rows.SONKULLANICI == true);
            break;
        }
        case ("Bayi"):
        {
            kayitlar = kayitlar.Where(rows => rows.BAYI == true);
            break;
        }
        case ("Tedarikçi"):
        {
            kayitlar = kayitlar.Where(rows => rows.TEDARIKCI == true);
            break;
        }
    }

    var kayitlar2 = from rows in kayitlar
                    select new
                    {
                        HESAPNO = rows.ID,
                        HESAPADI = rows.HESAPADI,
                        CARIADI = (rows.CARITURU == "Bireysel" ? rows.B_ADSOYAD : rows.K_FIRMAADI)
                        //BAKIYE= "",
                        //PARABIRIMI = rows.LISTEPARABIRIMI
                    };

    if (sortcolumn != "")
    {
        if (sortdirection)
            kayitlar2 = kayitlar2.Order(sortcolumn, SortDirection.Ascending).AsQueryable();
        else
            kayitlar2 = kayitlar2.Order(sortcolumn, SortDirection.Descending).AsQueryable();
    }

    return kayitlar2.Skip(page_size * (page_index)).Take(page_size);
}
Run Code Online (Sandbox Code Playgroud)

System.Web.UI.Page在下面的方法中从两个不同的类调用此方法

  1. CariHesaplar
  2. YeniBilet.


private void cari_paging_button_yenile()
{
    Button_CariIleri.Enabled = true;
    Button_CariGeri.Enabled = true;

    if (CariPageIndex == 0)
        Button_CariGeri.Enabled = false;
    string tumu = "Tümü";

    if (DAL.DAOCari.GetAllBy_HesapAdiFirmaAdiCariNo_Turu_bypage_short(TextBox_CariArama.Text, tumu, CariPageSize, CariPageIndex + 1, CariSortColumn, CariSortDirection).Count() == 0)//problem occured in this row
        Button_CariIleri.Enabled = false;
}
Run Code Online (Sandbox Code Playgroud)

问题:当我GetAllBy_HesapAdiFirmaAdiCariNo_Turu_bypage_short在Cari​​Hesaplar中调用时,我可以在if语句中获取计数.cari_paging_button_yenile()但是,在YeniBilet中,当我尝试获取Count()时,我得到了

错误19'System.Linq.IQueryable'不包含'Count'的定义,并且没有扩展方法'Count'接受类型'System.Linq.IQueryable'的第一个参数可以找到(你是否缺少using指令或者程序集引用?)C:\ Users\yigit\Desktop\PROTicari(11.04.2011)\ UI\MusteriDestek\YeniBilet.aspx.cs 257 17 UI

我尝试了很多东西来解决这个问题,但没有任何效果.之后,我认为它可能是页面using开头的一个缺失的声明.我检查了两个类 using只有不同using System.Linq.Dynamic;但是它们都有,using System.Linq;所以我认为它不可能问题.然后我写using System.Linq.Dynamic;了YeniBilet,它也给出了错误,错误消失了.

我的问题是为什么using System.Linq.Dynamic;当一个页面已经using System.Linq;不是Linq.Dynamic一个子集时没有添加引用Linq?为什么我必须再次添加它的引用?

Dav*_*son 5

Count()不存在IQueryable,但确实存在IQueryable<TSource>.除了在System.Linq.Dynamic中,但System.Linq.Dynamic不是基类库的一部分,您将始终必须添加对它的引用(如果您将其编译为DLL)或使用命名空间(如果包括在内)您项目中的Dynamic.cs).它不是BCL中Linq的子集.为了强化每个人所说的内容,使用命名空间仅使用命名空间(其顶级).它是C#语言的设计,由编译器强制执行.