2011-05-16 70 views
1

檢索數據的作品,使我有查詢:C#LINQ:如何從返回的記錄

var query = 
       from product in db.LUT_ProductInfos 
       where product.flavor == flavor && product.Container == container 
       select flavor; 

這是返回1次的記錄(它應該總是返回一個記錄)。我如何從結果中提取單個屬性值?例如,如果返回1個記錄3列像名姓phoneNumber的,和我想要做的與每個值的類似

string fName = firstName 
string lName = lastName 
int pNumber = phoneNumber 

沒有進入的對象數據映射,什麼是最直接的方法從結果中提取的那些值可變查詢

回答

3
var query = 
      from product in db.LUT_ProductInfos 
      where product.flavor == flavor && product.Container == container 
      select new {product.Foo, product.flavor.Bar, ...}; 

var row = query.First(); // or Single(), FirstOrDefault(), SingleOrDefault() 

string foo = row.Foo; 
int bar = row.Bar; 
... 

這具有隻有所期望的特性包括在SELECT語句的優點,並且沒有隱藏的額外往返(延遲加載)。

1
var singleResult = 
      (from product in db.LUT_ProductInfos 
      where product.flavor == flavor && product.Container == container 
      select flavor).Single(); 
string fName = singleResult.firstName 
string lName = singleResult.lastName 
int pNumber = singleResult.phoneNumber 
+0

我很肯定你需要選擇產品而不是味道。 – juharr 2011-05-16 20:40:52

0
var row = db.LUT_ProductInfos 
    .SingleOrDefault(product => product.flavor == flavor && product.Container == container); 

if (row != null) 
{ 
    string firstName = row.fName; 
    string lastName = row.lName; 
    string phone = row.pNumber; 
} 
0

做到這一點的最好和最簡單的方法是重新編寫這樣的:

var query = 
       (from product in db.LUT_ProductInfos 
       where product.flavor == flavor && product.Container == container 
       select flavor).FirstOrDefault(); 

它將返回第一個匹配的記錄。如果沒有匹配記錄,它將返回空值,否則返回LUT_ProductInfos類的對象。你也可以像這樣跳過記錄:

​​