在C#中使用LINQ计算不同值时出错

时间:2015-10-20 12:49:01

标签: c# file-handling linq

我正在使用FileHandler实用程序将CSV文件转换为Objects(Lore)。获取数据后,目的是消除数据字段someTemp的重复项。我使用LINQ查询来计算不同的值,但它给出以下错误: '对象'不包含' someTemp'的定义没有扩展方法' someTemp'接受类型'对象'的第一个参数。可以找到(您是否缺少using指令或程序集引用?)

有人可以帮忙。

FileHelperAsyncEngine engine = new FileHelperAsyncEngine(typeof(Lore));
            using (engine.BeginReadFile(filePath))
            {
                var distinct = engine.GroupBy(x => x.someTemp).Select(y => y.Last());enter code here
                // The engine is IEnumerable
                foreach (Lore lor in engine)
                {
                    StringBuilder str = new StringBuilder();
                    str.Append(lor.RowNumber + " ");
                    str.Append(lor.LocalDate + " ");
                    str.Append(lor.LocalTime);
                    Console.WriteLine("{0} {1} {2}",lor.RowNumber,lor.LocalDate,lor.LocalTime);
                    listBox1.Items.Add(str);
                }
            }

 [DelimitedRecord(",")]
    [IgnoreFirst]
    public class Lore
    {
        public int RowNumber;

        [FieldConverter(ConverterKind.Date,@"MM/dd/yyyy")]
        public DateTime LocalDate;

        [FieldConverter(ConverterKind.Date,"HH:mm:ss")]
        public DateTime LocalTime;

        public int Batch_Size;

        public int someTemp { get; set; }

    }   

2 个答案:

答案 0 :(得分:1)

如果您在编译时知道您的类型,则应使用通用版本,否则您将必须转换结果。

var engine = new FileHelperAsyncEngine<Lore>();

答案 1 :(得分:0)

nVoigt的回答是正确的,通用版本是你需要的,我认为它会为你处理。如果没有,正确的行将是:

var distinct = engine.GroupBy(x => x.someTemp).Select(y => (y.Last()) as Lore)

var distinct = engine.GroupBy(x => x.someTemp).Select(y => y.Last()).Cast<Lore>()

如果您在编译时不知道类型,则应该只使用此结构,然后您将Lore替换为类型参数T