Проблема в том, что он использует анонимный тип, который нельзя использовать в объявлении поля.
Исправление состоит в том, чтобы написать именованный тип с теми же членами и использовать этот тип в вашем запросе. Если вы хотите, чтобы он работал так же, как ваш анонимный тип, он должен:
- Взять все значения в конструкторе
- Быть неизменным, открывая свойства только для чтения
- Переопределить
Equals
, GetHashCode
и ToString
- Быть запечатанным
Вы можете просто использовать Reflector для декомпиляции кода, но тогда вы получите универсальный тип, который вам на самом деле не нужен.
Класс будет выглядеть примерно так:
public sealed class Foo
{
private readonly string text;
private readonly int itemId;
private readonly string path;
public Foo(string text, int itemId, string path)
{
this.text = text;
this.itemId = itemId;
this.path = path;
}
public string Text
{
get { return text; }
}
public int ItemId
{
get { return itemId; }
}
public string Path
{
get { return path; }
}
public override bool Equals(object other)
{
Foo otherFoo = other as Foo;
if (otherFoo == null)
{
return false;
}
return EqualityComparer<string>.Default.Equals(text, otherFoo.text) &&
return EqualityComparer<int>.Default.Equals(itemId, otherFoo.itemId) &&
return EqualityComparer<string>.Default.Equals(path, otherFoo.path);
}
public override string ToString()
{
return string.Format("{{ Text={0}, ItemId={1}, Path={2} }}",
text, itemId, path);
}
public override int GetHashCode()
{
int hash = 17;
hash = hash * 23 + EqualityComparer<string>.Default.GetHashCode(text);
hash = hash * 23 + EqualityComparer<int>.Default.GetHashCode(itemId);
hash = hash * 23 + EqualityComparer<string>.Default.GetHashCode(path);
return hash;
}
}
Ваш запрос в конце изменится на:
select new Foo(line, id, m.Groups[2].Value)