我有一個複雜的對象,其中有很多孩子,我只想從中選擇一些屬性,並在子網中顯示其子元素。之前的查詢結構的方式是在每個需要的.Include()
中盲目折騰,生成一條1095行長的SQL語句。Casting a Select從屬性集合中的.Last()中獲取屬性
我沒有問題從一個子對象獲取單個屬性,但是一個是最後一次執行的活動的名稱。在集合上執行.Last().Name
會拋出異常,無法將其轉換爲SQL。我將做一個簡單的例子,以幫助可視化(所有FKS都在我的代碼實際設置,這不是問題):
public class Foo
{
public int Id { get; set; }
// just a dummy class everyone knows for illustration
public Address Address { get; set; }
public ICollection<Activity> Activities { get; set; }
}
public class Activity
{
public string Name { get; set; }
}
public class FooModel
{
public int Id { get; set; }
public string StreetName { get; set; }
public string LastActivity { get; set; }
}
這是我設置了查詢的一個基本的例子:
public IEnumerable<FooModel> GetHomePageItems(IEnumerable<int> fooIds)
{
return await context.Foos
.Where(f => fooIds.Contains(f.id))
.Select(f => new FooModel
{
Id = f.Id,
StreetName = f.Address.Street,
// here is the problem as it can't
// convert this to SQL
LastActivity = f.Activities.Last().Name
})
.ToListAsync();
}
這是一件拄着柺杖的工作,還是我不得不在沒有LastActivity
的情況下將所有東西拉開,然後用GroupBy查詢活動並以這種方式獲取它們?
優秀!我會在早上試試。 – krillgar
Huzzah!有效。謝謝你,先生。在昨天結束的恐慌中,我忘記了讓它更像這樣「冗長」。 (爲了記錄,這把查詢減少到54行。) – krillgar
@krillgar很高興它爲你工作得很好! :) –