詳解如何在C 中使用投影 Projection

2022-09-26 01:30:08 字數 2260 閱讀 5255

投影(projection) 是一種可以將查詢結果進行塑性的一種操作,你可以使用投影將乙個 object 轉成僅包含你需要屬性的新物件,這篇文章中,我們就一起看看如何使用 投影 功能。

linq 整合查詢中有兩個支援投影的擴充套件方法,分別為:select和selectmany操作,可以用它們投影單個或者多個屬性,或者投影查詢的結果集到乙個新的匿名型別中,還可以在投影的過程中執行: 再計算,過濾,或者其他一些必要的操作。

為了演示目的,我先構造乙個 author 類,**如下:

public class author

public string firstname

public string lastname

public string address

public author(int id, string firstname,

string lastname, string address)

}下面的**展示了如何使用 select 操作去查詢資料。

static void main(string args)

; foreach (var name in authors.select(e => e.firstname))

console.readline();

}從上圖中可以看到,所有作者的名字都展示到控制台了。

你可以從乙個資料來源中投影多個屬性,也可以將查詢結果投影到匿名型別中,下面的**片段展示了如何將多個屬性投影到匿名型別中。

static void main(string args)

; var data = authors.select(e => new );

foreach (var item in data)

, ");

}console.readline();

}可以使用 selectmany 從實現ienumerable介面的集合中查詢資料,還有乙個,如果你想從多個集合中查詢資料,可以使用 selectmany 將多個集合扁平化到乙個 集合,為了演示,接下來在 author 類中新增乙個 subject 屬性,這個集合中包含了當前作者出版書籍的列表,如下**所示:

public class author

public string firstname

public string lastname

public string address

public list subjects

public author(int id, string firstname,www.cppcns.com string lastname,

string address, list subjects)

}接下來可以用下面的**獲取所有作者出版的書的合集。

static void main(string args)

),new author(2, "anand","naraswamy", "cochin, india", new list),

new author(3, "steve","smith", "ohio, usa", new list),

new author(4, "uday","denduluri", "london, uk", new list),

new author(5, "jane","barlow", "london, uk", new list)

};var data = authors.selectmany(a => a.subjects).distinct();

foreach (var subject in data)

console.readline();

}可以用 where 操作符去過濾 selectmany 產生的結果集,下面的**片段展示了滿足以j開頭的名字 並且位址包含uk的所有作者,並且展示這些作者的 firstname 和 subject 的合集,**如下:

var data = authors.where(a => a.address.indexof("uk") >= 0)

.selectmany(a => a.subjects, (a, subject) => new )

.where(n => n.firstname.startswith("j"));

foreach (var author in data)

當執行完上面的**後,可以看到如下的截圖:

投影在 efcore 中被大量使用,如果只想獲取底層資料庫中指定的列的資料,這就是投影要做的事,在後面的文章中,我們會討論投影的其他高階功能比如:一對多關係,結果集過濾,排序等等。。。

譯文鏈結:

如何在C 中使用WebService

將他解壓後,進入到資料夾 gsoap 2.8.18 gsoap 2.8 gsoap bin win32 裡面有2個我們要用到的exe,wsdl2h.exe和soapcpp2.exe,如果缺少乙個typemap.dat,則從gsoap 2.8.18 gsoap 2.8 gsoap下拷貝進來,最後就可以...

如何在 C 中使用 RabbitMQ

rabbitmq 是乙個非常流行的,開源的,使用erlang語言編寫的框架,通常在電信級平台中作為訊息中介軟體使用,rabbitmq實現了高階的amqp協議用於實現程序間,應用程式間,伺服器之間的訊息互動,而且它還有乙個非常?的特性,你可以使用自定義外掛程式來擴充套件rabbitmq的功能,而且它還...

如何在 C 中使用 Attribute

attribute 在 c 中是乙個非常強大的特性,它能夠給你的程式集新增元資料資訊。attribute 實際上是乙個物件,它可以與以下元素中的任何乙個相關聯 程式集 類 方法 委託 列舉 事件 字段 介面 屬性和結構,它會在這些物件上做資訊宣告,當程式執行之後,你可以通過反射來獲取關聯到這些物件上...