2012-07-12 89 views
2

因此,我有一張辦公室位置表,每列包含相關信息(即辦公室名稱,地址,城市,州,郵編,國家)。如何使用LINQ to SQL將單行添加到列表?

我已經在界面中設置了用戶選擇他們的辦公室,其餘的都填寫了他們。

我知道如何使用通用列表並使用多行填充一列,就像我使用從同一個表中列出辦公地點的下拉菜單所做的那樣。

我不知道如何從單行填充多列的通用列表。

例如,這裏是代碼我對前者的正常工作:

private List<string> selectLocs() 
    { 
     Locs offLoc = new Locs(); 

     List<string> objList = new List<string>(); 

     var select = from l in offLoc.Locations 
        orderby l.OFFICE 
        select l; 

     foreach (Location loc in select) 
     { 
      objList.Add(loc.OFFICE); 
     } 

     return objList; 
    } 

這裏是後一種情況下,不完整的代碼,因爲我不知道怎麼做同樣的事情:

private List<string> selectAddr(string strLoc) 
    { 
     List<string> objList = new List<string>(); 

     Locs offLocs = new Locs(); 

     var select = from l in offLocs.Locations 
        where l.OFFICE == strLoc 
        select l; 

     //foreach what? in select? Do I even use a foreach loop? 


     return objList; 
    } 

不知道爲什麼沒有人問過這一點。

+0

如果以前沒有人問過這個問題,但客觀感覺很普遍,那麼如果你問的問題是正確的話,你可能會重新考慮。 – 2012-07-12 13:29:59

回答

4

你第一種方法可以簡化:

private List<string> SelectLocations() 
{ 
    Locs offLoc = new Locs(); 
    return (from l in offLoc.Locations 
      orderby l.OFFICE 
      select l.OFFICE).ToList(); 
} 

你的第二個方法:

private List<string> SelectAddresses(string strLoc) 
{ 
    Locs offLocs = new Locs(); 
    return (from l in offLocs.Locations 
      where l.OFFICE == strLoc 
      select l.ADDRESS).ToList(); 
} 

UPDATE:如果你需要幾個屬性,然後返回全位置對象:

private List<Location> SelectLocations(string strLoc) 
{ 
    Locs offLocs = new Locs(); 
    return (from l in offLocs.Locations 
      where l.OFFICE == strLoc 
      select l).ToList(); 
} 

還要儘量避免使用匈牙利符號(爲變量名稱添加前綴,後者描述變量類型)。您可以使用locationName而不是strLoc

+0

哇這是有幫助的,你真棒。第二個只選擇一列(地址)否?那麼其他專欄l.CITY,l.STATE,l.ZIP呢? – 2012-07-12 13:40:53

+0

是的,第二個只選擇一列。如果您需要所有其他列,請使用第三個示例。它返回具有所有可用列的位置對象。 – 2012-07-12 13:42:25

+0

在第三個示例中,我收到「Error 無法將類型'System.Collections.Generic.List '隱式轉換爲'System.Collections.Generic.List ' – 2012-07-12 13:46:41

3

你的第一種方法可能是

return new Locs().Locations.OrderBy(m => m.Office).Select(l => l.OFFICE).ToList()

你的第二個查詢也許應該不會返回一個列表,但位置

private Location selectAddr(string strLoc) 
{ 
    return new Locs().Locations.FirstOrDefault(m => m.OFFICE == strlLoc); 
} 

,或者如果你想地址的列表(這是不是真的很清楚)

private IList<string> selectAddr(string strLoc) 
{ 
    return new Locs().Locations.Where(m => m.OFFICE == strlLoc) 
    .Select(l => l.ADDRESS).ToList(); 
} 

或Locatio列表ns

private IList<Location> selectAddr(string strLoc) 
{ 
    return new Locs().Locations.Where(m => m.OFFICE == strlLoc) 
    .ToList(); 
} 
+0

謝謝,這可以在很多其他情況下使用! – 2012-07-12 13:41:05

+0

好棒的東西,如果我可以給你們三個人買一瓶啤酒, – 2012-07-12 13:58:15

2

Sephethus。以上所有答案都是有效的,但我不確定他們是否回答你的問題。你在問如何從一行中返回多個列?

您可以使用匿名類型來幫助這裏,例如,

private IList<string> selectAddr(string strLoc) 
{ 
    Locs offLocs = new Locs(); 
    var xx = (from l in offLocs.Locations 
      where l.OFFICE == strLoc 
      select new { l.Address1, l.Address2, l.County }); 

return xx.Select(a=>String.Concat(x.Address1, x.Address2, x.County).ToList(); 

} 

但是,你甚至可以進一步簡化這個,

private IList<string> selectAddr(string strLoc) 
    { 
     Locs offLocs = new Locs(); 
     return (from l in offLocs.Locations 
       where l.OFFICE == strLoc 
       select String.Concat(l.Address1, l.Address2, l.County)).ToList(); 

    } 

或者更好的

var offLocs = new Locs(); 
return offLocs.Where(o=>o.Office = strLoc).Select(l=>String.Concat(l.Address1, l.Address2, l.County)).ToList(); 

但是,這只是一個品味的問題!

+0

我覺得在「簡化這個更進一步」的第二個建議是完美的,測試現在,謝謝! – 2012-07-12 13:54:17