我是SubSonic的新手,也是LINQ的新手,所以我只是想把一個小應用程序放在一起。Linq和SubSonic - 返回嵌套的複雜類型
我已經將模板全部排序並運行正常,但是我對這個LINQ語句遇到了一些麻煩(簡化了一下,真正的語句有一些其他的連接,但是它們不影響這個特定的問題所以我已經刪除它們爲了簡潔):
var addresses = from address in Database.Addresses.All()
select new Address()
{
MyNestedType = new NestedType()
{
Field1 = address.ADDR1
}
};
如果我執行該語句我從「System.String」到「NestedType」得到錯誤無效轉換。當我嘗試枚舉結果時出現。
我可能忽略了顯而易見的事實,但我無法看到任何需要這種轉換的地方。
Both Field1 and address.ADDR1是字符串。
任何想法我做錯了什麼?
編輯:
我已經再看看這一點,並在努力提供更多的信息,我創建使用SimpleRepository和演示問題SQLite數據庫小,完整的例子。使用SimpleRepository我得到的錯誤是不同的(Sequence不包含任何元素),但結果是一樣的。下面是完整的代碼:
public class DatabaseAddress
{
public int Id { get; set; }
public string Address1 { get; set; }
}
public class Address
{
public NestedType MyNestedType;
}
public class NestedType
{
public string Field1 { get; set; }
}
static class Program
{
[STAThread]
static void Main()
{
var repo = new SimpleRepository("Db", SimpleRepositoryOptions.RunMigrations);
DatabaseAddress address1 = new DatabaseAddress();
address1.Address1 = "Test";
repo.Add(address1);
var all = repo.All<DatabaseAddress>();
var addresses = from address in repo.All<DatabaseAddress>()
select new Address { MyNestedType = new NestedType { Field1 = address.Address1 } };
}
}
在這個例子中,all
包含對象添加到數據庫中,但addresses
返回「序列不包含任何元素」。
如果我在select
語句中使用匿名類型而不是具體類型,它將起作用。
我的知識顯然存在差距;任何幫助讚賞。
您的代碼必須有其他錯誤,根據所提供的信息不可能確定哪些錯誤。根據這段代碼,唯一的可能性是Field1是NestedType類型。既然你說這是一個字符串,那麼你沒有給我們足夠的實際代碼來解決這個問題。 – 2010-08-12 19:25:29
感謝您的評論。我想我已經添加了足夠的信息,因爲實際上沒有比我發佈的代碼多得多的代碼。我編輯了我原來的帖子並添加了一個完整的示例。 – nukefusion 2010-08-12 21:56:57