所以你的數據源保持對象的集合,其中每個對象都有屬性X/Y/Z/E.還是在數據庫方面,你有至少列XYZ E.
表你可能知道如何獲取這個集合的行。
class MyData
{
public string X {get; set;}
public decimal Y {get; set;}
public int Z {get; set;}
public int E {get; set;}
}
IEnumerable<MyData> fetchedData = FetchMyData(...);
// this is where you get the data from the table which creates for instance
// your example.
您的列的類型可能略有不同,但這個想法保持不變。
我想找到列Y的值,其中列X的值是B.
因爲這個問題的,在我看來你是很新的LINQ。
在LINQ,當你從你的源收集想要的只是某些項目,您使用Where(...)
在x => F(x)將其中部分被稱爲lambda表達式。 x
是源集合中元素的標識符。 F(x)
是一個布爾表達式,用於決定是保留該元素還是將其丟棄。它類似於:
List<MyData> sourceCollection = FetchData();
List<MyData> resultCollection = new List<MyData>()
foreach (MyData x in sourceCollection)
{
if (F(x))
resultCollection.Add(x); // = Keep the item
// else Don't keep the it
}
在你的情況,你只想保留一個X值爲「B」的thos項目。所以,你的Where
將是:
.Where(fetchedItem => fetchedItem.X == "B")
每當你想每一個項目集合中變換成不同的對象,使用LINQ的選擇:
.Select(x => F(x))
這裏F(X)是一個函數,它的元素,並將其轉換爲輸出類型的對象。
它類似於:
var resultCollection = new List<...>()
foreach (var item in sourceCollection)
{
var resultItem = F(item);
resultCollection.Add(resultItem);
}
你的情況:你只想要列Y.的選擇值爲:
.Select(fecthedItem => fetchedItem.Y);
所以總的結果將是:
// All Y Where X Equals B:
var allYWhereXEqualsB = fetchedData
.Where(fetchedItem => fetchedItem.X == "B")
.Select(fecthedItem => fetchedItem.Y);
換句話說:從順序fetchedData
中,只取那些帶有的元素210等於「B」。從剩餘的收集中,從每個元素只取得財產Y的價值。
簡單的紀念bonjour! (一旦你知道如何做到這一點)
而且,如果數據表中存在多於一個'B'的事件,是否有辦法將它們總和並將其分配給變量? –