65.9K
CodeProject 正在变化。 阅读更多。
Home

从 DataRow 返回单个值的通用 LINQ 用法

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2010年7月15日

CPOL
viewsIcon

27104

这个技巧可以让你返回列 Y 匹配你的筛选条件时,列 X 的值。

我一直使用 LINQ to objects,但由于我们并非只使用 SQL Server,所以一直避免使用 LINQ to sql。最近我开始研究 System.Data.DataSetExtensions,并意识到 LINQ 是一种更快(至少更容易编写代码)从 DataTable 中获取 DataColumn 值的方法。假设我有一个人员姓名表,我想获取 person_id = 100 时的人员的姓氏。我以前会这样做:
var persons = new DataTable();

string lastName = string.Empty;

DataRow[] foundRows = persons.Select("Person_Id = 100");
if (foundRows.Length == 1)
{
    lastName = foundRows[0]["Last_Name"].ToString();
}
现在使用 LINQ,我创建了以下方法:
        
public static T GetFirstResultValue<t,ty>(DataTable table,string colToSearch, string colToReturn, TY searchValue) where TY: IComparable
{
    T ret = default(T);

    IEnumerable rows = from row in table.AsEnumerable()
                                        where row.Field(colToSearch).CompareTo(searchValue) == 0
                                        select row;

    if (rows.Count() == 1)
    {
        ret = (T) rows.First()[colToReturn];
    }

    return ret;
}
这个方法仅在搜索结果返回 1 行时有效,但可以很容易地修改为返回 DataRow 集合,或者找到的行的列值 IEnumerable 列表。希望这能帮助到大家!
© . All rights reserved.