查询语法LINQ有效但方法语法LINQ给出了运行时错误

时间:2016-02-01 11:06:11

标签: c# entity-framework linq

我正在使用Entity Framework 7 RC1 Code First

我有一个函数需要返回链接到User的国家/地区(ID,名称)列表。 用户不直接链接到国家/地区,但通过城市链接。城市与国家有关。国家与国家有关。

以下LINQ查询语法查询返回一个已排序的唯一国家/地区列表。

public async Task<IEnumerable<Country>> Search(int userId)
{
    IQueryable<Country> table = from co in _db.Countries
                join st in _db.States on co.CountryId equals st.CountryId
                join ci in _db.Cities on ci.StateId equals st.StateId
                where (ci.UserId == userId)
                select co;
    return await table.Distinct().OrderBy(co => co.CountryName).ToListAsync();

}

但是我需要用Linq方法语法

来编写它
public async Task<IEnumerable<Country>> Search(int userId)
{
    IQueryable<Country> = _db.Cities
        .Include(ci => ci.State.Country)
        .Where(c => c.UserId == userId)
        .Select(ci => ci.States.Country)
        ;
    return await table.Distinct().ToListAsync();
}

这样可行,但数据未排序。

如果我将其更改为待排序

public async Task<IEnumerable<Country>> Search(int userId)
{
    IQueryable<Country> table = _db.Cities
        .Include(ci => ci.States.Country)
        .Where(c => c.UserId == userId)
        .Select(ci => ci.States.Country)
        ;
    return await table.Distinct().OrderBy(co => co.CountryName).ToListAsync();
}

给我一​​个运行时错误

  

InvalidOperationException:Sequence不包含匹配元素

如果我将orderby移动到select

之后
public async Task<IEnumerable<Country>> Search(int userId)
{
    IQueryable<Country> table = _db.Cities
        .Include(ci => ci.States.Country)
        .Where(c => c.UserId == userId)
        .Select(ci => ci.States.Country)
        .OrderBy(co => co.CountryName)
        ;
    return await table.Distinct().ToListAsync();
}

它有效,但不按排序顺序返回

当我尝试使用groupby时

public async Task<IEnumerable<Country>> Search(int userId)
{
    IQueryable<Country> table = _db.Cities
        .Include(ci => ci.States.Country)
        .Where(c => c.UserId == userId)
        .Select(ci => ci.States.Country)
        .GroupBy(ci => ci.States.Country)
        .Select(co => co.FirstOrDefault())
        .OrderBy(co => co.CountryName)
        ;
    return await table.ToListAsync();
}

我收到以下运行时错误

  

InvalidOperationException:Sequence包含多个元素

问题:如何用LINQ方法语法编写查询?

0 个答案:

没有答案