C#将列表转换为可枚举并使用LINQ进行选择

时间:2017-11-21 23:33:11

标签: c# linq enums

我有一个与Enumerable和整数列表相关的问题。我有以下代码抛出一个错误说明"' int'不包含' Field'的定义并且有一些无效的论点。"我确信这很容易,但是想知道是否有人可以提供帮助。谢谢!

public static IList<Site> GetSiteFromSites(DataTable data)
{
    var linqRegions = Enumerable.Empty<int>();

    IList<Site> sites = data.AsEnumerable().Select(r =>
    {
        return new Site()
        {
            id = r.Field<string>("id"),
            name = r.Field<string>("name"),
            address_line1 = r.Field<string>("address_line1"),
            address_line2 = r.Field<string>("address_line2"),
            post_code = r.Field<string>("post_code"),
            county = r.Field<string>("county"),
            city = r.Field<string>("city"),
            phone_number = r.Field<string>("phone_number"),                                
            regions = linqRegions.Where(u => u.Field<int>("regions") == r.Field<int>("regions")).ToList().Select(z => z.Field<int>("regions")).ToList()      
            //error is thrown for above line of code "regions"               
        };
    }).ToList();

    return sites;
}

1 个答案:

答案 0 :(得分:0)

变量linqRegions是一个空的可枚举的整数。

在抛出错误的行中,您正在调用Where()方法,在该方法中尝试获取每个元素的Field属性。因为每个元素都是一个int,所以它会抛出'int' does not contain a definition for 'Field'错误。

将您的行更改为错误:

regions = linqRegions.Where(u => u == r.Field<int>("regions")).ToList()

这将始终返回零元素(因为linqRegions为空),所以不要忘记填充它。即使这样,该行也没有任何意义,因为它总是返回相同值的列表(值等于r.Field<int>("regions"))。